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.
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