Javascript 如何拥有数量可变的蓝鸟承诺?(Nodejs)
我有一个空的文档数组Javascript 如何拥有数量可变的蓝鸟承诺?(Nodejs),javascript,node.js,promise,response,bluebird,Javascript,Node.js,Promise,Response,Bluebird,我有一个空的文档数组 let arrayOfDocuments = []; 我想调用http请求(使用superagent)下载文本文件并将其内容放入arrayOfDocuments request.get('docs.google.com/document/d/SOME_FILE_NAME').then((res) => { arrayOfDocuments.push(res.text); }); 这部分我明白了,但这里是棘手的部分。我想把它放到for循环中,在for循环之后
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(设i=0;i
如果循环完成,我如何只执行最后一行?我的程序现在运行的方式是,for循环之后的代码在http请求得到响应并完成之前运行。我认为有一种方法可以用蓝鸟的承诺做到这一点,但我不确定。谢谢 使用
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*/}
}
});
var承诺=[]
var links=['a.com/a','a.com/b']
for(设i=0;i使用承诺。所有如图所示
实际上,它可能看起来像:
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*/}
}
});
var承诺=[]
var links=['a.com/a','a.com/b']
for(设i=0;i
您可以使用以下方法:
您可以使用以下方法:
我想你在寻找。我如何获得每个发送请求的响应?我想你在寻找。我如何获得每个发送请求的响应?我如何获得每个请求的响应?就像我想检查每个响应的类型(res.type)使用不同的类型执行稍有不同的操作。in-then方法可访问由承诺数组排序的响应数组。i-then方法是什么?您可以简化代码以执行承诺。全部(links.map(link=>request.get(link))。然后(arrayOfResponses=>/*做任何事情*/);@JoseHermosillaRodrigo考虑过这个问题,但我尽量不认为自己熟悉map/forEach/filter函数。在for循环时,它们会让一些人感到困惑(在本例中,它们很难看,而且过于冗长)你是完全正确的,我希望你的代码是真实的。但是我如何得到每个请求的响应?就像我想检查每个响应的类型(res.type)使用不同的类型执行稍有不同的操作。in-then方法可访问由承诺数组排序的响应数组。i-then方法是什么?您可以简化代码以执行承诺。全部(links.map(link=>request.get(link))。然后(arrayOfResponses=>/*做任何事情*/);@JoseHermosillaRodrigo考虑过这一点,但我尽量不认为自己熟悉map/forEach/filter函数。它们让一些人感到困惑,而for循环(在本例中,虽然很难看且过于冗长)更容易识别。你完全正确,我更喜欢你的代码行。这取决于你的情况(特别是如果你不关心处理个人承诺,只想收集所有承诺)此解决方案可能比我的解决方案更好。在阅读问题后,我不清楚这是否是事实(现在仍然是),因此我在回答中提出了更一般的方法。取决于你的情况(特别是如果你不关心处理个人承诺,只想收集所有承诺)这个解决方案可能比我的好。在阅读了问题后,我不清楚这是否是事实(现在仍然是),因此我在回答中提出了更一般的方法。