Szukaj…
Wprowadzenie
Funkcja async
to taka, która zwraca obietnicę. await
dochód dla dzwoniącego, dopóki obietnica nie zostanie rozwiązana, a następnie kontynuowana z wynikiem.
Iterator pozwala na zapętlenie kolekcji za pomocą pętli for-of
.
Iterator asynchroniczny to zbiór, w którym każda iteracja jest obietnicą, na którą można oczekiwać za pomocą pętli for-await-of
.
Iteratory asynchroniczne to propozycja etapu 3 . Są w Chrome Canary 60 z --harmony-async-iteration
Składnia
- funkcja asynchroniczna * asyncGenerator () {}
- wydajność oczekuje na asyncOperationWhichReturnsAPromise ();
- for czekaj (pozwól wynikowi asyncGenerator ()) {/ * wynikiem jest rozwiązana wartość z obietnicy * /}
Uwagi
Iterator asynchroniczny to deklaratywny strumień ściągający, w przeciwieństwie do deklaratywnego strumienia wypychającego Observable.
Przydatne linki
Podstawy
JavaScript Iterator
to obiekt z metodą .next()
, która zwraca IteratorItem
, czyli obiekt o value : <any>
i done : <boolean>
.
JavaScript AsyncIterator
to obiekt z metodą .next()
, która zwraca Promise<IteratorItem>
, obietnicę dla następnej wartości.
Aby utworzyć AsyncIterator, możemy użyć składni generatora asynchronicznego :
/**
* 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;
}
}
Funkcja delayedRange
przyjmuje maksymalną liczbę i zwraca AsyncIterator
, który zwraca liczby od 0 do tej liczby, w 1 sekundowych odstępach.
Stosowanie:
for await (let number of delayedRange(10)) {
console.log(number);
}
Funkcja „ for await of
pętlę” to kolejna część nowej składni, dostępna tylko w funkcjach asynchronicznych, a także w generatorach asynchronicznych. Wewnątrz pętli uzyskane wartości (które, pamiętajcie, są obietnicami) są rozpakowywane, więc obietnica jest ukryta. W obrębie pętli możesz poradzić sobie z wartościami bezpośrednimi (uzyskanymi liczbami), for await of
pętlę będzie czekać na obietnice w twoim imieniu.
Powyższy przykład czeka 1 sekundę, log 0, kolejną sekundę, log 1 i tak dalej, aż loguje się 9. W tym momencie AsyncIterator
zostanie done
, a for await of
pętlę zakończy się.