Considere o cenário em que você tem um array de valores (por exemplo, myArray) e precisa executar uma promessa- função baseada (por exemplo, myPromise) sequencialmente, passando cada elemento da matriz como um parâmetro. Como você pode implementar um "loop pausável" que garanta que as promessas sejam resolvidas na ordem correta?
Para obter execução sequencial, você pode usar uma combinação de encadeamento de promessas e processamento iterativo. Aqui está um trecho de código que demonstra como isso pode ser feito:
myArray.reduce( (p, x) => p.then(() => myPromise(x)), Promise.resolve() )
Essa abordagem aproveita o método de redução para iterar sobre o array e criar uma série de promessas encadeadas. Cada promessa é resolvida após a promessa anterior ser concluída, aplicando efetivamente a sequência de execução desejada.
Se você tiver suporte para funções assíncronas, uma solução mais limpa está disponível usando o forEachSeries function:
const forEachSeries = async (iterable, action) => { for (const x of iterable) { await action(x) } } forEachSeries(myArray, myPromise)
Esta função itera sobre o array e faz uma pausa em cada elemento, aguardando que a promessa seja resolvida antes de prosseguir para a próxima iteração.
Se você precisar coletar os valores de retorno das promessas em um array, você pode modificar a função forEachSeries da seguinte forma:
const mapSeries = async (iterable, fn) => { const results = [] for (const x of iterable) { results.push(await fn(x)) } return results }
Esta função itera sobre o array, acumula os resultados das promessas no array de resultados e, finalmente, retorna os resultados coletados.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3