angularjs - For 循环和 Promise

标签 angularjs angularjs-service

我在管理具有多个 Promise 的 for 循环时遇到一些麻烦。我读过应该使用 $q.all,但到目前为止我还没有取得任何成功。我需要这个函数来确保 for 循环内的所有异步调用都已发生。

refreshFeed: function(){    
    var defer = $q.defer();
    var promises = []; // array of promises

    for (var x = 0; x < userdata.length; x++){
        this.getLatest(x).then(function(){
            promises.push(x);
        });    
    }
    console.log(userdata); // this is updated successfully by getLatest(x)

    $q.all(promises).then(function(){ 
        defer.resolve();
    })

    return defer; 
}

它成功打印了console.log,但随后我在最初调用refreshFeed()的行处收到控制台错误“未定义不是函数”。

如有任何帮助,我们将不胜感激。谢谢!

编辑:

getLatest: function(x){ 
            var deferred = $q.defer();
            var promise = twitterService.getLatestTweets(userdata[x].searchterm, userdata[x].sources).then(function(data) {
                userdata[x].tweets = data;
                console.log(userdata[x].tweets);
                deferred.resolve();
            });
            return deferred.promise;
    }

更新:我使用了 PSL 的答案并尝试了 getLatest,终于让它工作了。我只需要将 userdata[x] 替换为函数参数。谢谢@PSL

最佳答案

您需要传递一系列 promise ,即使您使用延迟模式,您也无法解决任何问题。假设 getLatest 返回一个您可以执行的 promise :-

refreshFeed: function(){    
    return $q.all(userdata.map(this.getLatest));
}

<强> Array.map

关于angularjs - For 循环和 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26445449/

相关文章:

javascript - Angular $state.go {重新加载 : true} shouldn't reinitialize the abstract parent controller

javascript - Angular 中使用模态窗口进行 Ng 重复和自动完成选择

javascript - splitPinCodes.split (',' )给出错误

jquery - AngularJS 中的 JSONP 请求不像 jQuery 那样工作

post - angular.js $http(或$resource)POST和transformRequest作为服务的请求示例

javascript - 如何使Angular的服务可供独立对象使用; Angular JS

angularjs - 通过 AWS CloudFormation 配置资源以部署 React(MERN)/Angular(MEAN) 应用程序

javascript - Onenote API,从 JavaScript 进行 PATCH 时出现奇怪的行为

angularjs - 如何在 resolve 中使用 $routeParams

javascript - 如何使用 angularjs 中的字符串从工厂内调用函数