循环javascript承诺以附加到数组
你好,下面我有循环javascript承诺以附加到数组,javascript,node.js,loops,asynchronous,promise,Javascript,Node.js,Loops,Asynchronous,Promise,你好,下面我有 var request = require('request'); getFood = function(lst){ return new Promise(function(resolve, reject){ //console.log(lst) request('https://api.jamesoff.net/recipe', function (error, response, recipe)
var request = require('request');
getFood = function(lst){
return new Promise(function(resolve, reject){
//console.log(lst)
request('https://api.jamesoff.net/recipe', function (error, response, recipe) {
lst.push(JSON.parse(recipe))
resolve(lst);
})
});
}
getFood([]).then(function(data){
for(var i = 0; i < 3; i++){
getFood(data)
}
return(data);
}).then(function(data){
console.log(data)
})
我的目标是通过使用承诺链,使用循环将三个倒数放入一个数组中。我只得到一个项目,我知道为什么会发生这种情况,但是我不能围绕着程序来完成我的目标。我能用代码解释一下吗?问题是循环中的getFood调用。如果你在重复承诺,那么最好的方法就是承诺 例如:
var promiseArray = [];
for(var i = 0; i < 3; i++){
promiseArray.push(getFood(data))
}
Promise.all(promiseArray).then(function(values) {
// values is array of resolve values in the order that promises were pushed into the array
});
这将按照调用承诺的顺序解决承诺,并将有助于解决您的问题。问题在于循环中的getFood调用。如果你在重复承诺,那么最好的方法就是承诺 例如:
var promiseArray = [];
for(var i = 0; i < 3; i++){
promiseArray.push(getFood(data))
}
Promise.all(promiseArray).then(function(values) {
// values is array of resolve values in the order that promises were pushed into the array
});
这将按照调用承诺的顺序解决承诺,并有助于解决您的问题。好的,关键是先将承诺放入数组,然后同时运行它们。。我发誓,所有我不知道的。。谢谢没问题。我发现的一般经验法则是,如果在循环中使用承诺,则需要使用Promise.allOk,因此关键是先将承诺放入数组,然后同时运行它们。。我发誓,所有我不知道的。。谢谢没问题。我发现的一般经验法则是,如果在循环中使用承诺,则需要使用Promise.all