【问题标题】:How to make a service funtion syncronus in angularjs如何在angularjs中使服务功能同步
【发布时间】:2017-08-29 00:25:54
【问题描述】:

我正在处理一个使用 mean.js 堆栈的项目。而且我需要创建一个可以在每个其他模块中使用的功能。我一直在阅读,我发现我必须将功能作为服务。对,这就是我的服务getSchoolByUser()

angular.module('schools').factory('Schools', ['$resource',
  function($resource) {
    return $resource('api/schools/:schoolId', {
      schoolId: '@id'
    }, {
      update: {
        method: 'PUT'
      },
      getSchoolByUser: {
        url: 'api/schoolByUser/:schoolPrincipalId',
        params: {
            schoolPrincipalId: 'schoolPrincipalId'
        },
        isArray: false
      }
    });
  }
]);

这个功能我会在每次创建新目录时使用。这是我如何在 CourseController 上使用它来创建新课程的示例:

angular.module('courses')
  .controller('CoursesController', ['$scope',
    '$stateParams',
    '$location', 'Authentication',
    'Courses','Schools',

    function($scope, $stateParams, $location, Authentication, Courses, Schools) {
      $scope.authentication = Authentication;


      // Create new course
      $scope.create = function(isValid) {
        $scope.error = null;

        if (!isValid) {
          $scope.$broadcast('show-errors-check-validity', 'courseForm');

          return false;
        }

        var course = new Courses($scope.course);

        $scope.school = Schools.getSchoolByUser({schoolPrincipalId: $scope.authentication.user.id
        }, function () {
          course.SchoolId = $scope.school.id;
          console.log(course);
          course.$save(function(response) {
            //some code here
          }, function(errorResponse) {
            $scope.error = errorResponse.data.message;
          });
        });
      };

    }
  ]);

有没有一种方法可以让我以同步的方式在函数内部返回,这样我就可以将它直接分配给范围,然后像这样继续保存:

course.SchoolId = getSchoolByUser();
course.$save(function(response) {

【问题讨论】:

  • 基本上,你问的是如何让 AJAX 同步?
  • 我想我不熟悉 ajax :( 抱歉
  • 所以你不想要一个异步服务调用?
  • 那是个问题
  • 你可以把它变成一个承诺,然后在承诺的回调中继续你的下一段代码docs.angularjs.org/api/ng/service/$q

标签: javascript angularjs meanjs


【解决方案1】:

您可以使用 angularjs(https://docs.angularjs.org/api/ng/service/$q) 的 $q 服务来实现。

【讨论】:

    猜你喜欢
    • 2018-01-15
    • 2019-02-07
    • 2014-12-20
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2020-05-06
    • 2022-11-29
    • 2014-07-10
    相关资源
    最近更新 更多