Geradores Assíncronos JavaScript

Resumo : neste tutorial, você aprenderá sobre os geradores assíncronos de JavaScript que iteram sobre dados que chegam de forma assíncrona.

O que é um gerador assíncrono

Um gerador assíncrono é semelhante a um gerador normal , exceto que seu next()método retorna Promise . Para iterar em um gerador assíncrono, você usa a for await...ofinstrução.

Introdução aos geradores assíncronos JavaScript

Um gerador regular é uma função que pode fazer uma pausa no meio do caminho e continuar de onde parou. Veja o exemplo a seguir:

function* sequence(start, end) {
    for (let i = start; i <= end; i++) {
        yield i;
    }
}

let seq = sequence(1, 5);

for (const num of seq) {
    console.log(num);
}
Linguagem de código:  JavaScript  ( javascript )

O sequenceé um gerador que retorna um número de startpara end.

Um gerador assíncrono é semelhante a um gerador normal, com as seguintes diferenças:

  • A asyncpalavra-chave é colocada antes da functionpalavra-chave.
  • O yieldretorna a Promise, em vez de um valor. Normalmente é Promiseum wrapper de uma operação assíncrona.

O seguinte ilustra como converter o gerador sequenceem gerador assíncrono asyncSequence:

async function* asyncSequence(start, end) {
    for (let i = start; i <= end; i++) {
        yield new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(i);
            }, 1000);
        });

    }
}Linguagem de código:  JavaScript  ( javascript )

Observe que usamos o setTimeout()para simular uma operação assíncrona.

Para iterar em todo o gerador assíncrono, você usa a for await...ofinstrução.

Como só podemos usar a awaitpalavra-chave dentro de uma asyncfunção, envolvemos o código dentro de um IIFE assíncrono da seguinte forma:

(async () => {
    let seq = asyncSequence(1, 5);

    for await (let num of seq) {
        console.log(num);
    }
})();
Linguagem de código:  JavaScript  ( javascript )

O código retorna uma sequência de 1 a 5 após cada segundo:

1
2
3
4
5
Linguagem de código:  JavaScript  ( javascript )

Os geradores assíncronos podem ser muito úteis quando você acessa um fluxo de dados e deseja relatar o progresso como se estivesse usando uma barra de progresso.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *