我有一个空的文档数组。
let arrayOfDocuments = [];
我想调用http请求(使用superagent)下载文本文件并将其内容放入我的arrayOfDocuments中。
request.get('docs.google.com/document/d/SOME_FILE_NAME').then((res) => {
arrayOfDocuments.push(res.text);
});
我得到的那部分,但这里是棘手的部分。我想把它放在for循环中并在for循环后做一些事情。所以喜欢:
for (let i = 0; i < numOfLinks; i++) {
// send the http requests as above
}
//do stuff here but only after the above for loop is finished.
如果循环结束,我怎么只做最后一行?我的程序现在运行的方式,for循环之后的代码在http请求获得响应并完成之前运行。我认为有一种方法可以使用Bluebird Promises,但我不确定。谢谢!
答案 0 :(得分:4)
您可以使用Promise.map
方法:
Promise.map(arrayOfLinks, function(link) {
return request.get(link);
}).then(function(arrayOfDocuments) {
// ...
});
答案 1 :(得分:2)
使用promise.all
var promises = []
var links = ['a.com/a', 'a.com/b']
for (let i = 0; i < links.length; i++) {
promises.push(request.get(links[i])
}
Promise.all(promises).then(function(allRes) {
//do anything you want with allRes or iterate
for (var promise in promises){
promise.then(function(singleRes){/*do something with each promise after all resolve*/}
}
});
在实践中,它可能看起来像:
{{1}}