Loops assíncronos em JavaScript
Embora o JavaScript forneça vários tipos de loops, criar um loop que pausa a execução para aguardar uma chamada assíncrona pode ser desafiante. Isso ocorre porque misturar código síncrono e assíncrono pode levar a um comportamento inesperado.
Solução: adote a abordagem assíncrona
Para superar essa limitação, é necessário abraçar totalmente o evento abordagem baseada em JavaScript. Isso envolve o uso de uma função que será chamada quando a chamada assíncrona for concluída. O loop pode então continuar a execução após o retorno de chamada ser invocado.
Introduzindo a função asyncLoop
Uma função auxiliar chamada asyncLoop pode ser criada para facilitar esse comportamento de loop assíncrono. São necessários três parâmetros:
A função asyncLoop mantém um índice de variável interno para rastrear a iteração atual e sinaliza uma variável concluída para indicar quando o loop foi concluído. Dentro da função, há um objeto de loop interno que fornece os seguintes métodos:
Para iniciar o loop, loop.next() é chamado. Cada vez que a função func é invocada, ela pode chamar loop.next() para continuar o loop ou loop.break() para encerrá-lo.
Exemplo de uso:
O exemplo a seguir demonstra como usar a função asyncLoop para criar um loop assíncrono:
asyncLoop(10, (loop) => {
someFunction(1, 2, (result) => {
console.log(loop.iteration());
loop.next();
});
}, () => {
console.log('cycle ended');
});
Este código executará someFunction 10 vezes de forma assíncrona e registrará o número da iteração no console. A mensagem de fim de ciclo será impressa quando o loop for concluído.
Ao utilizar essa abordagem, os desenvolvedores de JavaScript podem criar loops assíncronos que funcionam perfeitamente no ambiente orientado a eventos, evitando possíveis problemas com o bloqueio do script e do navegador.
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