[Перевод] Отказываемся от коллбэков: Генераторы в ECMAScript 6
Я постоянно слышу людей, ноющих об асинхронных коллбэках в JavaScript. Держать в голове порядок исполнения в этом языке немного трудно (это тот случай, который называют «Callback Hell» или «The Pyramid of Doom»), если до этого ты имел дело с синхронным программированием. Моим обычным ответом было «тебе придется как-то с этим обходиться». В конце концов, ожидаем ли мы, что все языки программирования будут выглядеть и ощущаться одинаково? Конечно нет. Все поменял недавний обзор черновика ECMAScript 6, в котором описываются генераторы — возможность языка, которая целиком изменит наш способ написания и серверного, и клиентского JavaScript. С помощью генераторов мы можем превратить вложенные коллбэки в похожий на синхронный код без блокирования нашей единственной event loop. Например, этот код: setTimeout (function (){ _get (»/something.ajax? greeting», function (err, greeting) { if (err) { console.log (err); throw err; } _get (»/else.ajax? who&greeting=»+greeting, function (err, who) { if (err) { console.log (err); throw err; } console.log (greeting+» »+who); }); }); }, 1000); может быть написан так: sync (function* (resume) { try (e) { yield setTimeout (resume, 1000); var greeting = yield _get ('/something.ajax? greeting', resume) var who = yield _get ('/else.ajax? who&greeting=' + greeting, resume) console.log (greeting + ' ' + who) } catch (e) { console.log (e); throw e; } }); Интересно, не правда ли? Централизованная обработка исключений и понятный порядок исполнения.Читать дальше →