var promises = []
array.forEach(element, i => {
promises[i] = functionThatReturnsAPromise(element);
if (somecondition) {
promises[i] = new Promise(function(){}); // empty initial promise
waitForSomeValue.then(function(result){
promises[i] = functionThatReturnsAPromise(result); // reassign promise
});
}
});
Promise.all(promises)
.then(function(result){
console.log(result);
});
由于存在一个条件,我需要先获取该值然后返回一个诺言,因此我正在创建一个空诺言并重新分配它。但是,这是行不通的,也就是说Promise.all永远不会返回结果。我在做什么错了?
答案 0 :(得分:6)
您的empty
承诺永远不会解决。在调用Promise.all
之后,在数组中重新分配值不会发生任何变化。相反,您应该使用链接来分配一个承诺,该承诺会同时执行两个承诺,等待另一个值,然后等待您的值。
array.forEach(element, i => {
if(!somecondition)
promises[i] = functionThatReturnsAPromise(element);
else {
promises[i] = waitForSomeValue.then(function(result){
return functionThatReturnsAPromise(result);
});
}
});
或更简单:
promises = element.map(el => {
if(!somecondition)
return functionThatReturnsAPromise(el);
return waitForSomeValue.then(functionThatReturnsAPromise);
});
答案 1 :(得分:3)
根据您提供的代码
const promises = array.map(element => someCondition
? waitForSomeValue.then(functionThatReturnsAPromise)
: functionThatReturnsAPromise(element);
);