如何创建一个循环,其中每个迭代发出一个返回promise的请求

时间:2015-07-31 18:00:30

标签: angular-promise bluebird asana

我正在尝试创建一个循环,每次迭代都会向Asana的API发出请求,并且返回值会被推送到数组中。

所以例如

for(thing of totalThings){
 getAProject(some projectID)
 .then(function(getAProject's Response){
 someArray.push(getAProject's Response 
})
.catch();
}

我想在此之后使用someArray进行循环完成,但我不知道应该在哪里放置return语句。

1 个答案:

答案 0 :(得分:1)

目标是逐页地从API迭代一组结果(例如任务)吗?你在使用Asana JS客户端吗?如果是这样,请参阅库的Collections文档,其中介绍了执行此操作的各种方法。

否则,您是否正在做一些与此不同的事情,比如可能尝试并行获取有关一堆项目的信息?请注意,承诺代码是异步,因此,如果您希望在代码完成后的某个时刻使用someArray,则需要“等待”所有要解决的承诺。

假设getAProject本身返回一个承诺,你可能会有:

var Promise = require('bluebird');
var responses = [];
for (...) {
  responses.push(getAProject(id));
}
Promise.all(responses).then(function(responses) {
  // Use the responses here
});