如何拥有可变数量的 Bluebird Promises? (节点)
How to have a variable number of Bluebird Promises? (Nodejs)
我有一个空的文档数组。
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 来做到这一点,但我不确定。谢谢!
按此处所示使用 promise.all
http://bluebirdjs.com/docs/api/promise.all.html
在实践中它可能看起来像:
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*/}
}
});
您可以使用Promise.map
方法:
Promise.map(arrayOfLinks, function(link) {
return request.get(link);
}).then(function(arrayOfDocuments) {
// ...
});
我有一个空的文档数组。
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 来做到这一点,但我不确定。谢谢!
按此处所示使用 promise.all
http://bluebirdjs.com/docs/api/promise.all.html
在实践中它可能看起来像:
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*/}
}
});
您可以使用Promise.map
方法:
Promise.map(arrayOfLinks, function(link) {
return request.get(link);
}).then(function(arrayOfDocuments) {
// ...
});