"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 garantir a execução síncrona de código baseado em promessa em um loop?

Como garantir a execução síncrona de código baseado em promessa em um loop?

Publicado em 2024-11-04
Navegar:630

How to Ensure Synchronous Execution of Promise-Based Code in a Loop?

Encontrando a estrutura de loop correta para garantir que o código baseado em promessa seja executado de forma síncrona

Ao trabalhar com código baseado em promessa, a estrutura de loop correta é essencial para garantir a execução síncrona de operações assíncronas. No cenário determinado, o objetivo é construir um loop que garanta a execução de "db.getUser(email).then(function(res) { logger.log(res); })" na ordem correta durante cada iteração.

Uma abordagem emprega uma função personalizada "promiseWhile". Embora este método possa ser útil para cenários gerais, introduz complexidade desnecessária para o caso específico em questão. Em vez disso, uma solução mais direta é aproveitar funções integradas de manipulação de array, como map() e reduzir().

Promessas paralelas versus seriais

O problema reside na exigência de manter a ordem das respostas, o que elimina o uso de abordagem paralela via Array.prototype.map(). Para construir a cadeia de promessas desejada com ordem preservada, Array.prototype.reduce() é mais adequado.

Exemplo:

function fetchUserDetails(arr) {
    return arr.reduce(function(promise, email) {
        return promise.then(function() {
            return db.getUser(email).done(function(res) {
                logger.log(res);
            });
        });
    }, Promise.resolve());
}

Ao utilizar este método, a execução das chamadas "db.getUser" é garantidamente serial, garantindo que a ordem dos resultados seja mantida. O código pode ser chamado da seguinte forma:

var arrayOfEmailAddys = [...];

fetchUserDetails(arrayOfEmailAddys).then(function() {
    console.log('all done');
});

Essa abordagem elimina a necessidade de loops ou condições complexas e garante a execução adequada da cadeia de promessas, mesmo quando se trata de operações assíncronas.

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