循环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