解析异步调用不在AngularJS

时间:2016-03-24 08:10:30

标签: javascript angularjs asynchronous parse-platform

我遇到了这段代码的麻烦,现在不会抛出错误,所以我不确定是什么问题。我想要做的是从我的Parse数据库中获取一系列课程,并在异步调用完成后将$scope.courses更新为该结果。现在它输入getCourses代码并从数据库中检索课程就好了,但承诺似乎没有以某种方式解决。

myApp.factory("coursesService", function($q){

  return {
    getCourses : function(){
      var deferred = $q.defer();
      var coursesQuery = new Parse.Query(Parse.Object.extend("Subject"));

      coursesQuery.find({
        success: function(results){
          deferred.resolve(results);
        },
        error: function(error){
          deferred.reject(error);
        }
      });
      return deferred.promise;
    }
  }

});

myApp.controller('SignUpController', function($scope, coursesService) {

    coursesService.getCourses().then(function(results){
      $scope.courses = results;
    });

});

同样,现在没有错误被抛出,所以我不确定是什么问题。

1 个答案:

答案 0 :(得分:0)

没关系,我想出了我的问题。结果我没有更新我的视图,所以我所要做的就是在我的deferred.resolve和deferred.reject代码行之后添加$rootScope.$apply();

这是我更新的工厂代码。

myApp.factory("coursesService", function($rootScope, $q){

  return {
    getCourses : function() {
      var deferred = $q.defer();

      var coursesQuery = new Parse.Query(Parse.Object.extend("Subject"));

      coursesQuery.find({
        success: function(results){
          deferred.resolve(results);
          $rootScope.$apply();
        },
        error: function(error){
          deferred.reject(results);
          $rootScope.$apply();
        }
      });
      return deferred.promise;

    }
  }


});