Ricerca…


introduzione

Una funzione async è quella che restituisce una promessa. await rendimenti al chiamante fino a quando la promessa non si risolve e poi continua con il risultato.

Un iteratore consente di eseguire il looping della raccolta con un ciclo for-of .

Un iteratore asincrono è una raccolta in cui ogni iterazione è una promessa che può essere attesa utilizzando un ciclo for-await-of .

Gli iteratori asincroni sono una proposta di stage 3 . Sono in Chrome Canary 60 con --harmony-async-iteration

Sintassi

  • funzione asincrona * asyncGenerator () {}
  • rendimento attendi asyncOperationWhichReturnsAPromise ();
  • in attesa (lascia risultato da asyncGenerator ()) {/ * risultato è il valore risolto dalla promessa * /}

Osservazioni

Un iteratore asincrono è un flusso di tiro dichiarativo in opposizione al flusso di spinta dichiarativo di un osservabile.

Nozioni di base

Un Iterator JavaScript è un oggetto con un metodo .next() , che restituisce un oggetto IteratorItem , che è un oggetto con value : <any> e done : <boolean> .

Un AsyncIterator JavaScript è un oggetto con un metodo .next() , che restituisce una Promise<IteratorItem> , una promessa per il valore successivo.

Per creare un AsyncIterator, possiamo usare la sintassi del generatore asincrono :

/**
 * 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 funzione delayedRange richiederà un numero massimo e restituirà un AsyncIterator , che produce numeri da 0 a quel numero, in intervalli di 1 secondo.

Uso:

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

L' for await of ciclo è un'altra parte della nuova sintassi, disponibile solo all'interno delle funzioni asincrone e dei generatori asincroni. All'interno del ciclo, i valori restituiti (che, ricordate, sono le Promesse) sono scartati, quindi la Promessa è nascosta. All'interno del ciclo, puoi gestire i valori diretti (i numeri ottenuti), l' for await of ciclo attenderà le Promesse per tuo conto.

L'esempio sopra attenderà 1 secondo, log 0, aspetta un altro secondo, log 1, e così via, fino a quando non registra 9. A quel punto l' AsyncIterator sarà done , e l' for await of ciclo uscirà.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow