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

      Думаю теперь можно, пришлю на днях.

© Habrahabr.ru