javascript – angular.js延迟不能在回调中工作

前端之家收集整理的这篇文章主要介绍了javascript – angular.js延迟不能在回调中工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请考虑以下示例:
.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',$timeout) {
    this.getData = function () {
        var deferred = $q.defer();
        $timeout(function () {

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

        return deferred.promise;
    };
}]);

当deferred.resolve()在回调内部触发时,有一些原因,那么在constroller上的回调不起作用.

有任何想法吗?

谢谢!

解决方法

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

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

猜你在找的JavaScript相关文章