"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como sequenciar a execução da promessa com passagem de parâmetros de um array?

Como sequenciar a execução da promessa com passagem de parâmetros de um array?

Publicado em 2024-11-18
Navegar:509

How to Sequence Promise Execution with Parameter Passing from an Array?

Execução sequencial de promessas com passagem de parâmetros de um array

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?

Solução: execução iterativa de promessas

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.

Alternativa de função assíncrona

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.

Coletando resultados

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.

Declaração de lançamento Este artigo foi reimpresso em: 1729407377 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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