9

文書化されているように見える唯一の場所は、この問題のスレッド実際の仕様です。ただし、削除の理由はどこにも掲載されていません。

新しい推奨方法は のようawait Promise.all()ですが、なぜawait*削除されたのか気になります。

4

1 に答える 1

15

まあ、削除される前の readme の最後のリビジョンには、その段落のすべてが既に記載されています。

await* と並列処理

ジェネレーターでは、 と の両方yieldyield*使用できます。非同期関数では、 のみawaitが許可されます。の直接の類推はyield* 、内部操作を繰り返し待機する必要があるため、非同期関数では意味がありませんが、各待機に渡す値がわからないためです ( の場合yield*、イテレータは着信値を受け入れないため、 undefined を渡すだけです)。

構文は異なるセマンティクスに再利用できることが示唆されています - sugar for Promise.all. これは、Promise の配列である値を受け入れ、Promise によって返される値の配列を (非同期で) 返します。これは、この提案のコアが利用可能になった後、まだシンタックス シュガーを持たない最も一般的な Promise 関連の操作の 1 つになると予想されます。

yield*したがって、予想されるように に直接類似するものではありません。実際には意味がありません。これは単なる提案であり、仕様提案に実際に含まれたことはありません。

コンセンサスは、必要以上に構文糖衣を導入する理由はないということでした。呼び出しPromise.allは大した違いではありません。

第 8号または第 29号の議論を確認できます。

最後に、より強力な武器 (並列処理) の提案はまだ進行中です。async iterationasync generatorsobservablesをチェックしてください。await*promise の単純な配列よりもキーワードを使用する方がはるかに優れているものがあるかもしれません。

async/await提案は最小限で、必要なプリミティブのみを紹介します。可能性のある延長については、バイクシェディングはありません。これについては、個別に説明する必要があります。

于 2016-02-03T04:17:18.117 に答える