この記事ではジェネレーター関数と非同期関数の違いについて紹介します。一定の参考値があります。困っている友人は参考にしてください。お役に立てれば幸いです。
ジェネレーター関数:
ジェネレーター関数は、ES2015 によって提供される非同期ソリューションであり、通常の関数とは大きく異なります;
特徴:
1. 関数キーワードの後に (*) 記号を付けます;
2. 関数本体内の状態として yield 式を使用します;
ジェネレーター関数はトラバーサーを返します。各状態は for...of メソッドを通じてトラバースできます;
使用法:
ジェネレーターを実行しますが、すぐには実行されません。トラバーサーを返します。トラバーサーは next() を呼び出して throw します。 () または return() は次の状態を実行し、エラーをキャプチャするか、トラバーサーを終了します;
async 関数:
async 関数は、ES2017 によって提供される非同期関数構文です。これはジェネレーターの構文シュガーですが、その使用法は依然としてジェネレーター関数とは大きく異なります;
機能:
1. 関数キーワードの前に async キーワードを続けます;
2. 関数本体内で await 式を使用します;
async 関数は Promise オブジェクトを返します;
使用法:
async 関数を実行すると、次のようにすぐに実行されます。通常の関数ですが、Promise オブジェクトを返します;
2 つの比較:
1. ジェネレーターは ES2015 に登場し、async は ES2017 に登場し、async は構文糖衣ですジェネレーターの;
2. 実行方法が異なります。ジェネレーターの実行には、エグゼキューター (next() およびその他のメソッド) の使用が必要です。async 関数には独自のエグゼキューターがあり、これは次の関数の実行と同じです。通常の関数;
3. async の構文とセマンティクスはより明確です、async は非同期を意味し、await は待機を意味します; Generator 関数の (*) 数値と yield のセマンティクスはそれほど直接的ではありません;
4. ジェネレーターの Yield の後には、サンク関数または Promise オブジェクトのみを続けることができます。また、async 関数の await の後には、Promise オブジェクトまたはプリミティブ型の値を続けることができます (これらは自動的に Promise に変換されます)。すぐに解決されるオブジェクト);
5. 戻り値が異なります。Generator は Promise オブジェクトを返す async と比較して、トラバーサーを返します。操作がより面倒です。
【関連する推奨事項: JavaScript ビデオ チュートリアル ]
以上がGenerator関数とasync関数の違いの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。