Nsynjs – JavaScript-движок с синхронными потоками и без колбеков
Комментарии (16)
24 мая 2017 в 00:06 (комментарий был изменён)
+2↑
↓
Стоило ли делать все это ради неявного async/await с переусложненным интерфейсом? В современном javascript не используются коллбэки, насколько мне известно — их место заняли Promise, которые, в свою очередь, пишутся в псевдосинхронном стиле через await.
24 мая 2017 в 00:30
0↑
↓
Промисы не сильно помогают если их нужно связать логикой, и выбор последующего шага зависит от данных с предыдущего.
А async/await все еще не доступен на многих браузерах, особенно в крупных компаниях. Ну не отказывать же им, если они требуют совместимости с IE…24 мая 2017 в 00:31 (комментарий был изменён)
+2↑
↓
все еще не доступен на многих браузерах, особенно в крупных компаниях.
Казалось бы, именно ради этого и был написан babel…
24 мая 2017 в 00:47
+1↑
↓
А этот движок прям сразу в крупных компаниях возьмут на вооружение…
24 мая 2017 в 00:13
+1↑
↓
Столько сил потрачено зря, действительно async/await чем не синхронность?24 мая 2017 в 00:50
0↑
↓
Тем, что не позволяет скрывать реализацию функции, вот была у нас функция синхронной мы писали без await, стала синхронной мы должны везде изменить на await, в итоге процентов 20 высокоуровневого кода становится заполнено ключевым словом «await».По проекту, задумка интересна, но ИМХО, это должно решаться автоматически, т.е. компилятор видит, что функция асинхронна и всегда «подставляет» await. Если же хотим получить Promise из нее и выполнить асинхронно, пишем специальную функцию (по опыту, таких ситуаций 0.1%).
24 мая 2017 в 01:10
0↑
↓
Из за этого вы решили разрабатывать этот проект? В ES6 можно использовать стрелочные функции, ушло много мешанины, и я думаю для некоторых асинхронных функций пометка async не то чтобы нагружает, наоборот помечает, что это асинхронная, что она возвращает промис. Ну не знаю, не представляю пока, где бы я ее применил бы.24 мая 2017 в 01:32
0↑
↓
это должно решаться автоматически, т.е. компилятор видит, что функция асинхронна и всегда «подставляет» awai
Согласен, именно так и должно быть. Вместо этого разработчики языка всем парят, что генераторы/промисы/async/await это круто и теперь надо всем учится программировать по-новому: массивы перебирать рекурсией, желательно хвостовой, и вообще переходить на ФП. Приходится за них это делать то, что должно было быть сделано много лет назад.24 мая 2017 в 02:19 (комментарий был изменён)
0↑
↓
Недавно тут штудировал esdiscuss на тему do notation, которая позволила бы решить проблемы с синтаксисом при использовании монад, которые, в свою очередь, прекрасно справляются с описанной вами проблемой. Ну что уж, выводы неутешительные, конечно, хотя там сам Брендан Айк написал год назад «We’ll get it»!
24 мая 2017 в 01:18
0↑
↓
Ключевой вопрос «Зачем?» — не нашел ответа.
24 мая 2017 в 01:26
0↑
↓
Что только люди не придумают… А ведь просили же, дайте нам инструмент для работы с асинхронностью. Ну дали. А воз и ныне там.
24 мая 2017 в 07:50
0↑
↓
Автор, а вы видели модуль co, например?
co(function*(){ var data = yield ajaxGetJson("data/index.json"); for(var i in data) { var el = yield ajaxGetJson("data/"+data[i]); progressDiv.append("
"+el+""); yield wait(1000); }; });24 мая 2017 в 08:44
0↑
↓
Да, недостатки те же, что и у async/await:
1. Если какая-то функция внизу стека стала async-await (или yield), то все вызывающие функции, и весь граф вызовов, надо также менять на async-await. Я считаю это неправильно, когда программист должен отвлекаться на такие вещи.
2. Несовместимо с некоторыми браузерами (только через babel)24 мая 2017 в 09:13
0↑
↓
Кстати, спасибо: благодаря комментариям я внезапно узнал, что node.js уже нативно поддерживает async/await и отказался от
co
. Смысла городить велосипеды я не вижу, честно. В вашем случае всяких обёрток и прочей лишней работы приходится делать больше, чем в случае с async/await.
24 мая 2017 в 09:12
0↑
↓
Не хотите ли добавить своё решение в коллекцию? https://github.com/nin-jin/async-js/
24 мая 2017 в 09:47
0↑
↓
Думаю теперь можно, пришлю на днях.