循环javascript承诺追加到数组

时间:2018-03-28 23:18:49

标签: 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) {
                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)
    })

我的目标是通过使用一个承诺链使用循环将三个收件人放入一个数组中。我只得到一个项目,我知道为什么会发生这种情况,但是我无法绕过程序来完成我的目标。我能用代码得到解释吗?

1 个答案:

答案 0 :(得分:2)

问题是你的循环中的getFood调用。如果您循环使用promises,最好的方法是使用Promise.all()

一个例子:

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
});

这可以按照调用顺序解决承诺,并且可以帮助解决您的问题。