Javascript 推动一个空洞的承诺,然后重新分配

Javascript 推动一个空洞的承诺,然后重新分配,javascript,promise,Javascript,Promise,因为有一个条件,我需要先获取值,然后返回一个承诺,所以我创建了一个空的承诺并重新分配它。然而,这是行不通的,我的意思是承诺。一切都不会返回结果。我做错了什么?你的承诺永远不会兑现。在Promise.all调用后,在数组中重新分配值不会改变任何内容。相反,您应该使用链接来分配一个承诺,该承诺同时执行这两个操作,等待另一个值,然后等待您的值 var promises = [] array.forEach(element, i => { promises[i] = functionTh

因为有一个条件,我需要先获取值,然后返回一个承诺,所以我创建了一个空的承诺并重新分配它。然而,这是行不通的,我的意思是承诺。一切都不会返回结果。我做错了什么?

你的
承诺永远不会兑现。在
Promise.all调用后,在数组中重新分配值不会改变任何内容。相反,您应该使用链接来分配一个承诺,该承诺同时执行这两个操作,等待另一个值,然后等待您的值

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);
    });
或者更简单:

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

不清楚您如何
等待somevalue
。无论您等待什么,都将在循环完成并调用promise all之后发生。它只是
array.forEach(元素,i=>{promises[i]=someCondition?waitForSomeValue.then(FunctionthatReturnsPromise):FunctionthatReturnsPromise(元素);})
因为
重新分配承诺
可能发生在
承诺之后。所有(承诺)
,您已经等待了一个永远无法解决的承诺,所以为时已晚
const promises = array.map(element => someCondition 
   ? waitForSomeValue.then(functionThatReturnsAPromise)
   : functionThatReturnsAPromise(element);
);