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