Нажимаем пустое обещание и переназначаем позже - PullRequest
0 голосов
/ 05 апреля 2019
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 никогда не возвращает результат. Что я делаю не так?

Ответы [ 2 ]

6 голосов
/ 05 апреля 2019

Ваше 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);   
});
3 голосов
/ 05 апреля 2019

на основе предоставленного вами кода

const promises = array.map(element => someCondition 
   ? waitForSomeValue.then(functionThatReturnsAPromise)
   : functionThatReturnsAPromise(element);
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...