サーチ…


前書き

async関数は、約束を返す関数です。約束が解決するまで発呼者に収穫をawaitから、結果を続行します。

イテレータを使用すると、 for-ofループを使用してコレクションをループすることができます。

非同期イテレータは、各反復がfor-await-ofループを使用しfor-await-ofことができる約束であるコレクションです。

非同期イテレータはステージ3の提案です。彼らは--harmony-async-iterationでChrome Canary 60に--harmony-async-iteration

構文

  • 非同期関数* asyncGenerator(){}
  • yieldはasyncOperationWhichReturnsAPromise()を待機します。
  • await(asyncGenerator()の結果){/ *結果は約束からの解決された値* /}

備考

非同期イテレータは、Observableの宣言プッシュストリームではなく、 宣言プルストリームです。

役に立つリンク

基本

JavaScript Iteratorは、 .next()メソッドを持つオブジェクトvalue : <any>これは、 value : <any>done : <boolean>オブジェクトであるIteratorItemを返します。

JavaScript AsyncIterator.next()メソッドを持つオブジェクトで、次の値の約束であるPromise<IteratorItem>を返します。

AsyncIteratorを作成するには、 非同期ジェネレータの構文を使用します。

/**
 * 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;
  }
}

delayedRange関数は最大数をとり、 AsyncIteratorを返します。これは、0からその数に1秒間隔で数を返します。

使用法:

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

for await of loopは、新しいシンタックスの1つです。非同期関数だけでなく、非同期ジェネレータも使用できます。ループの中で、得られた値(Promisesであることを覚えておいてください)はアンラップされているので、Promiseは隠されています。ループの中で、あなたが直接値(得られた数値)を扱うことができる、 for await ofループがあなたに代わって約束を待ちます。

上記の例では、ログが記録されるまで、1秒間、ログ0、別の秒間待機、ログ1などを待機します。その時点で、 AsyncIteratorが実行さdonefor await ofループのAsyncIteratorが終了します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow