Node.js にジェネレーターが追加されました。
私の理解では、ジェネレーターを使用して、はるかに直線的に見えるコードを記述し、コールバックの地獄とドゥーム スタイルのコーディングのピラミッドを回避できます。
したがって、ここまでの私の理解では、ジェネレーター内では、コードは「yield」ステートメントに到達するまで実行されます。ジェネレーター関数の実行は、この時点で中断されます。ステートメントはyield
、関数である可能性がある戻り値を指定します。通常、これはブロッキング I/O 関数であり、通常は非同期で実行する必要があります。
yield の return 関数は、ジェネレーターと呼ばれるものに返されます。
私の質問は、この時点で何が起こるかです。yield が返したブロッキング I/O 関数を正確に実行するのは何ですか?
線形に見えるジェネレーター/yield コードを記述するには、ジェネレーターを呼び出す特定の種類の関数、ジェネレーターをループして、yield によって返される各非同期関数を実行する関数が必要であるというのは正しいですか?非同期関数の結果をジェネレーターに戻しますか?
yield によって返された非同期関数がどのように実行されるかは、まだ正確にはわかりません。ジェネレーターを呼び出す関数で実行する場合、非同期で実行されますか? そうしないとブロック動作が発生するため、私はそう推測しています。
私の質問を要約すると:
- ジェネレーターを使用して「線形」非同期コードを記述するには、ジェネレーターを反復処理し、生成された関数をコールバックとして実行し、コールバックの結果をジェネレーターに返す呼び出し関数が必要ですか?
- 質問 1 の答えが「はい」の場合、生成された関数は正確にどのように非同期で実行されますか?
プロセス全体がどのように機能するかについて、より良い概要/要約を提供できる人はいますか?