Comments 7
как то поверхностно, вот бы вы разобрали как устроен `co` и как сделано так что когда yiеld-ишь промисы и другие генераторы их значения возвращаются из выражения, и код выглядит синхронным.
0
1. Koa.js, из которой Вы выдрали co.js, с версии 2.* не использует генераторы как прослойку и советуют использовать async await с babel.js.
2. Не нужно использовать генераторы таким способом, они для другого предназначались.
2. Не нужно использовать генераторы таким способом, они для другого предназначались.
+8
2. Не нужно использовать генераторы таким способом, они для другого предназначались.В случае использования babel-а, действительно, нет резона насиловать генераторы. А в случае чистого кода, это удобная возможность использовать async-await, без наличия оных, пока v8 их внедряет (жаль они не пишут ориентировочных дат). Потом можно всё хоть автозаменой перевести на нативные async-await.
Лично я стараюсь в разработке использовать только уже реализованные возможности (пусть и под v8 флагом). Потому что кривого debug-а я уже наелся всласть. Что порой бесполезные стрек-трейсы nodejs, что довольно часто глючащий отладчик в web developer tools.
Кстати говоря, что там babel делает с async-await? Разбирает в switch или юзает генераторы?
0
TIL не надо объяснять нововведения на примере их использования совместно с библиотеками.
Хотел почитать про генераторы (потому что до сих пор не понимаю зачем они), прочитал про co и Koa и что там выполнение будет прыгать между функций
Хотел почитать про генераторы (потому что до сих пор не понимаю зачем они), прочитал про co и Koa и что там выполнение будет прыгать между функций
Затем yield next остановит текущую функцию и передаст управление другому middleware logger, он также выполнит все до своего yield next.звучит как goto АД.
+1
Почитайте вот это. Генераторы нужны не для чисел Фибоначчи, конечно, как это обычно демонстрируют в примерах. Генераторы это просто такой сахар, для того чтобы итерировать что-нибудь так, как этого хочется вам. К примеру jQuery выборку пропускать через for-of, получая в качестве элемента .eq(index). Насколько фантазии хватит.
Т.е. генераторы это логическое продолжение всей этой песне-пляски с итерированием. Т.е. for-of, Symbol.iterator, geneator's это всё об одном и том же.
Так получилось, что в деле генераторы используются именно в качестве реализации сахара для async, await. Т.е. совсем для других целей. В этом просто нужды оказалось больше, чем в полноценных итераторах. Забавно вышло.
Лично я надеюсь на скорейшую нативную имплементацию async-ов.
А ещё генераторы это одна из самых неочевидных вещей в языке. Большую часть конструкций можно описать используя другие конструкции. Получится многословно, но довольно очевидно. А для того, чтобы разобрать в более простые конструкции генератор, придётся писать огромный и нечитаемый switch-case и сопровождающий его код.
Т.е. генераторы это логическое продолжение всей этой песне-пляски с итерированием. Т.е. for-of, Symbol.iterator, geneator's это всё об одном и том же.
Так получилось, что в деле генераторы используются именно в качестве реализации сахара для async, await. Т.е. совсем для других целей. В этом просто нужды оказалось больше, чем в полноценных итераторах. Забавно вышло.
Лично я надеюсь на скорейшую нативную имплементацию async-ов.
А ещё генераторы это одна из самых неочевидных вещей в языке. Большую часть конструкций можно описать используя другие конструкции. Получится многословно, но довольно очевидно. А для того, чтобы разобрать в более простые конструкции генератор, придётся писать огромный и нечитаемый switch-case и сопровождающий его код.
+1
Sign up to leave a comment.
Генераторы в ES6 и асинхронный код по-новому