Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В последних стандартах, появились свои промайсы, а потом и async/await, что вкупе позволяет свести вычислительный процесс к полностью синхронной модели. И казалось бы, что проблема решена, но у меня есть ряд претензий к данному решению:
- реализация далека от «элегантности»
- на данный момент медленно работает
- плодит плохо читаемый код
- плохо подходит для организации «массивной» параллельности (без кучи плохо читаемого кода)
Вы не поверите, но при трансляции генераторов и асинхронных функций Babel генерирует примерно такой же код, как и у вас в статье:
regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return fetch();
case 2:
result = _context.sent;
_context.next = 5;
return result.json();
case 5:
data = _context.sent;
return _context.abrupt("return", data);
case 7:
case "end":
return _context.stop();
}
}
}, _callee, this);Очень странно, что набор switch/case, которые исполняются в неопределенном порядке, кажется вам более читаемым, чем исходник с async/await.
Давайте забудем про async/await
Что то вроде функции, только асинхронной
А давайте не будем забывать про нативную фичу языка, которую сделали для работы с асинронностью и которая именно что реализует "функции, только асинхронные"?
Думаю вам будет небезынтересно взглянуть на эту магию:
https://github.com/eigenmethod/mol/tree/master/fiber
Javascript — решение асинхронной проблемы?