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



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow