当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《angular.js延迟在回调中不起作用》经验,为你挑选了1个好方法。

请考虑以下示例:

    .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> Dimkin..:

如图所示,angular中的promise API是范围的一部分,因此,当调用内部回调时的resolve不在$ apply循环中并且它不知道函数调用.

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


您可以接受自己的答案,如果他们解决了问题,您应该接受.
推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有