Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Promise.all síncrona

Pelo que eu entendi, o Promise.all executa todas as promises passadas, em paralelo de forma assíncrona e depois trata o resultado de uma vez só, quanto todas terminarem a execução, certo?

Existe alguma forma de tornar essa Promise.all síncrona? Ou seja, só iniciar a segunda promise após o término da primeira...

Se não, qual a forma recomendada para realizar este comportamento?

Grato!

2 respostas
solução!

Fala Vítor!

Você pode usar Async/Await do ES7, veja um exemplo:

Supondo que você tenha um array de itens e você queira performar determinada operação em cada item de forma que uma não inicie a não ser que anterior seja terminada.

Repare que fnretorna uma promise

async function processaArray(array, fn) {
    let resultados = [];
    for (let i = 0; i < array.length; i++) {
        let r = await fn(array[i]);
        resultados.push(r);
    }
    return resultados;    // valores resolvidos das promises
}

// exemplo de uso
processaArray(arr, processaItem).then(function(resultado) {
    // tudo é feito aqui
    // array de dados em resultado
}, function(razao) {
    // rejeição
});

Existem outras formas de se fazer, utilizando reduce por exemplo, mas acredito que utilizando Async/Await seja a mais 'atual'

Espero ter ajudado!

Abraços.

Oi Victor, que bom que conseguiu resolver o problema.

Como foi resolvido, estou fechando o tópico, ok? Qualquer coisa não hesite em abrir outro!