gpt4 book ai didi

javascript - 如何使用 $q Promise 同步执行 FOR LOOP?

转载 作者:行者123 更新时间:2023-11-28 18:38:32 25 4
gpt4 key购买 nike

我有一组 Facebook groupID,我想按同步顺序检查它们,如果其中一个失败,则跳到下一个。当它们全部执行完毕后,我想将所有结果发送到我的服务器。

下面的代码解释了我想要完成的要点(当然它不起作用):

var groups = [1111,2222,3333];
var feed_collection = [];

// Unfortunately this for loop does not wait for the FB api calls to finish before looping to next
for(var x = 0; x < groups.length; x++){
FB.api("/"+groups[x]+"/feed", function(response, err){
feed_collection += response;
});
}
// Send the feed_collection to server
feed_collection.sendToServer();

如何让 for 循环等待?我知道我可以使用 $q.all(),但是我一直不知道如何生成 promise 并将其保存到 promise_array 中。这段代码位于客户端,我使用的是 AngularJS 1,但我对任何方法都持开放态度。非常感谢!

最佳答案

function getGroupFeed(groupId) {
var deferred = $q.defer();
FB.api('/' + groupId + '/feed', function (response, err) {
if (err) return deferred.reject(err);
return deferred.resolve(response);
});
return deferred.promise;
}

这就是如何在 Angular 中快速生成 promise 的方法。现在您还可以创建一系列 promise :

var groupPromises = groups.map(function (groupId) {
return getGroupFeed(groupId);
});

或者如果您坚持使用 for 循环:

var groupPromises = [];
for (var i = 0, len = groups.length; i < len; i++) {
groupPromises.push(getGroupFeed(group[i]));
}

这个 Promise 数组可以在 $q.all 中使用,只有在数组中的所有 Promise 都得到解析后,它才会被解析。

关于javascript - 如何使用 $q Promise 同步执行 FOR LOOP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36549218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com