angular.js延迟在回调中不起作用

时间:2013-05-24 10:11:50

标签: javascript angularjs promise

考虑以下示例:

    .service('movieGetter', ['$q', '$timeout', function ($q, $timeout) {
    this.getData = function () {
        var deferred = $q.defer();
        $timeout(function(){
            mock.getData(function(data){
                deferred.resolve(data);
            });
        }, 2000);

        return deferred.promise;
    };
}]);

由于某种原因,这段代码不起作用,当行deferred.resolve()在constroller中触发回调时不会

另一方面,这个例子很好用:

    .service('movieGetter', ['$q', '$timeout', function ($q, $timeout) {
    this.getData = function () {
        var deferred = $q.defer();
        $timeout(function () {

            deferred.resolve('test');
        }, 2000);

        return deferred.promise;
    };
}]);

当deferred.resolve()在回调内部触发时,有些原因导致constroller上的回调无效。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:14)

看起来,angular中的promise API是作用域的一部分,因此,当调用resolve内部回调时,angular不在$ apply循环中,并且它不知道函数调用。

要解析此$ scope。应在resolve函数之后立即调用$ apply()。如果在服务中,并且$ scope injectable不可用,则可以注入$ rootScope。