Node.js теперь имеет генераторы.
Мое понимание заключается в том, что генераторы могут использоваться для написания кода, который выглядит намного более линейным и позволяет избежать обратного вызова ада и пирамиды кодирования стиля doom.
Итак, я понимаю, что внутри генератора код выполняется до тех пор, пока он не достигнет оператора yield. Выполнение функции генератора приостанавливается в этот момент. Оператор yield
указывает возвращаемое значение, которое может быть функцией. Обычно это будет блокирующая функция ввода-вывода, которая обычно должна выполняться асинхронно.
Возвращаемая функция возврата возвращается к тому, что называется генератором.
Мой вопрос: что происходит в этот момент? Что именно выполняет функция блокирующего ввода-вывода, возвращаемая доходностью?
Правильно ли, что для записи кода генератора/выхода, который кажется линейным, должна существовать определенная функция, которая вызывает генератор, функцию, которая проходит через генератор и выполняет каждую асинхронную функцию, возвращаемую выходом и возвращает результат асинхронной функции обратно в генератор?
Мне все еще не ясно, как выполняется функция asynch, возвращаемая выходом. Если он выполняется функцией, вызывающей генератор, выполняется ли она асинхронно? Я угадываю, потому что иначе это приведет к блокированию поведения.
Обобщение моих вопросов:
- Для написания "линейного" асинхронного кода с генераторами необходимо, чтобы там была вызывающая функция, которая выполняет итерацию по генератору, выполняя заданные функции как обратные вызовы и возвращая результат обратного вызова обратно в генератор?
- Если ответ на вопрос 1 да, то точно как выполняются выполняемые функции - асинхронно?
Может ли кто-нибудь предложить лучший обзор/резюме того, как работает весь процесс?