この提案 は、async
関数が内部でジェネレーター関数を使用できることを示唆していますが、ES2017仕様ではこれの確認を見つけることができません。
さらに、ジェネレータプロトタイプがChrome/Node.jsでめちゃくちゃになっても、async
関数は影響を受けないようです。これは、GeneratorFunction
がAsyncFunction
によって使用されていないことを示唆しています、少なくとも直接:
Object.getPrototypeOf((function * () {}).prototype).next = null;
(async () => {
return await Promise.resolve(1);
})()
.then(console.log);
async
/await
は、既存のネイティブ実装でどのように機能しますか?
実装は、提案によって提案され、通常BabelとTypeScriptで実装されているPromise
/generator関数アプローチで可能になるよりもパフォーマンスが優れていますか?
私が知る限り、ジェネレータ関数はasync/await
の動作を模倣するために使用されます。 TypeScriptを使用すると、JavaScriptにコンパイルされ、セットアップに応じて、async/await
構文をジェネレーターの実装にコンパイルします。
ここでのコンパイルの詳細: https://basarat.gitbooks.io/TypeScript/docs/async-await.html
したがって、TypeScriptでそれらを使用することについて心配する必要はまったくありません。
ネイティブ実装ではジェネレータを使用しないと思います。基本的には、promiseを処理するための単なる構文シュガーである必要があります。