Pull to refresh

Comments 7

как то поверхностно, вот бы вы разобрали как устроен `co` и как сделано так что когда yiеld-ишь промисы и другие генераторы их значения возвращаются из выражения, и код выглядит синхронным.
UFO just landed and posted this here
1. Koa.js, из которой Вы выдрали co.js, с версии 2.* не использует генераторы как прослойку и советуют использовать async await с babel.js.
2. Не нужно использовать генераторы таким способом, они для другого предназначались.
2. Не нужно использовать генераторы таким способом, они для другого предназначались.
В случае использования babel-а, действительно, нет резона насиловать генераторы. А в случае чистого кода, это удобная возможность использовать async-await, без наличия оных, пока v8 их внедряет (жаль они не пишут ориентировочных дат). Потом можно всё хоть автозаменой перевести на нативные async-await.

Лично я стараюсь в разработке использовать только уже реализованные возможности (пусть и под v8 флагом). Потому что кривого debug-а я уже наелся всласть. Что порой бесполезные стрек-трейсы nodejs, что довольно часто глючащий отладчик в web developer tools.

Кстати говоря, что там babel делает с async-await? Разбирает в switch или юзает генераторы?
Либо через regenerator, где здоровенный switch-case, либо await заменяет на yield и оборачивает функцией, которую указал в настройках. bluebird.coroutine, на пример.
Второй вариант поддерживается node нативно, так что async-await можно спокойно использовать, если пишешь под node.
TIL не надо объяснять нововведения на примере их использования совместно с библиотеками.
Хотел почитать про генераторы (потому что до сих пор не понимаю зачем они), прочитал про co и Koa и что там выполнение будет прыгать между функций
Затем yield next остановит текущую функцию и передаст управление другому middleware logger, он также выполнит все до своего yield next.
звучит как goto АД.
Почитайте вот это. Генераторы нужны не для чисел Фибоначчи, конечно, как это обычно демонстрируют в примерах. Генераторы это просто такой сахар, для того чтобы итерировать что-нибудь так, как этого хочется вам. К примеру jQuery выборку пропускать через for-of, получая в качестве элемента .eq(index). Насколько фантазии хватит.

Т.е. генераторы это логическое продолжение всей этой песне-пляски с итерированием. Т.е. for-of, Symbol.iterator, geneator's это всё об одном и том же.

Так получилось, что в деле генераторы используются именно в качестве реализации сахара для async, await. Т.е. совсем для других целей. В этом просто нужды оказалось больше, чем в полноценных итераторах. Забавно вышло.
Лично я надеюсь на скорейшую нативную имплементацию async-ов.

А ещё генераторы это одна из самых неочевидных вещей в языке. Большую часть конструкций можно описать используя другие конструкции. Получится многословно, но довольно очевидно. А для того, чтобы разобрать в более простые конструкции генератор, придётся писать огромный и нечитаемый switch-case и сопровождающий его код.
Sign up to leave a comment.

Articles