使用Q使用异步调用填充数组

时间:2018-11-28 10:51:01

标签: javascript arrays node.js promise q

我有一个使用Q库异步返回值的函数。 而且我必须在循环内调用它以将所有结果填充到数组中。

我一直在研究的示例(由于数组在填充之前已返回,因此无法按预期工作)。

$city

我已经读到可以使用Q.all来调用几个函数,但是我不明白如何在循环内调用它。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

尝试一下:

function fillArray(){
    var promises = [];

    for(var i = 0; i < numberOfElements; i++){
        promises.push(asyncFunction(i));
    }

    return q.all(promises);
}

function asyncFunction(number){
    var deferred = q.defer();
    deferred.resolve(number+1);
    return deferred.promise;
}

promise.all()被拒绝的原因与第一个被拒绝的承诺相同。这意味着,如果数组中的某些promise被拒绝,则all返回的promise也将被拒绝。如果您要等待所有原始诺言得到兑现,可以使用promise.allSettled()

答案 1 :(得分:0)

我做到了

fillArray().then(function(result){
   console.log(result);
});

,它工作正常。

只有我从您的代码中获得的额外收益正在改变

var resultsArray = [];