Buscar..


Introducción

Una función async es aquella que devuelve una promesa. await a la persona que llama hasta que la promesa se resuelva y luego continúa con el resultado.

Un iterador permite que la recopilación se realice en bucle con un bucle for-of .

Un iterador asíncrono es una colección donde cada iteración es una promesa que puede esperarse utilizando un bucle for-await-of .

Los iteradores asíncronos son una propuesta de etapa 3 . Están en Chrome Canary 60 con --harmony-async-iteration

Sintaxis

  • función asíncrona * asyncGenerator () {}
  • el rendimiento espera asyncOperationWhichReturnsAPromise ();
  • for await (dejar que el resultado de asyncGenerator ()) {/ * result es el valor resuelto de la promesa * /}

Observaciones

Un iterador asíncrono es una corriente de extracción declarativa en lugar de una corriente de inserción declarativa de Observable.

Enlaces útiles

Lo esencial

Un Iterator JavaScript es un objeto con un método .next() , que devuelve un IteratorItem , que es un objeto con value : <any> y done : <boolean> .

Un JavaScript AsyncIterator es un objeto con un método .next() , que devuelve un Promise<IteratorItem> , una promesa para el siguiente valor.

Para crear un AsyncIterator, podemos usar la sintaxis del generador asíncrono :

/**
 * Returns a promise which resolves after time had passed.
 */
const delay = time => new Promise(resolve => setTimeout(resolve, time));

async function* delayedRange(max) {
  for (let i = 0; i < max; i++) {
    await delay(1000);
    yield i;
  }
}

La función delayedRange tomará un número máximo y devuelve un AsyncIterator , que produce números de 0 a ese número, en intervalos de 1 segundo.

Uso:

for await (let number of delayedRange(10)) {
  console.log(number);
}

The for await of loop es otra pieza de nueva sintaxis, disponible solo dentro de funciones asíncronas, así como generadores asíncronos. Dentro del bucle, los valores producidos (que, recuerden, son promesas) se desenvuelven, por lo que la promesa se oculta. Dentro del bucle, puede hacer frente a los valores directos (los números cedidos), el for await of bucle esperará a que la promesas en su nombre.

El ejemplo anterior esperará 1 segundo, ingrese 0, esperar otro segundo, iniciar la sesión 1, y así sucesivamente, hasta que se inicia la sesión 9. En cuyo punto la AsyncIterator se done , y la for await of bucle terminará.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow