Доброго дня!

Начиная с 8 LTS async/await полностью поддерживается на платформе Node; начиная с Chrome 62 (октябрь 2017) в консоли можно использовать await вне тела асинхронной функции, т.е. top-level. На сегодня на этапе Stage 2 находится соответствующий proposal в tc39. В то же время существует огромное количество легаси-кода с коллбэками даже без промисов, со смесью того и другого, и всякие другие комбинации. Где-то даже остались следы генераторов. Т.е. в мире JavaScript сосуществуют как минимум 4 разные модели реализации (а)синхронности.

А что предпочитаете вы? Не откажите в любезности уделить минутку ответу. Спасибо!

Комментарии (12)


  1. Tankerxyz
    05.12.2018 11:30

    Наряду с асинхроными итераторами:

    for await (const line of readLines(filePath)) {
      console.log(line)
    }
    


    1. goss Автор
      05.12.2018 11:33

      Забыл их включить в список опций, спасибо!


  1. dagen
    05.12.2018 11:35
    +1

    Почему о генераторах говорится как о чём-то древнем и ненужном? Использую и async/await и генераторы вместе, для разных задач


    1. goss Автор
      05.12.2018 11:45

      имел в виду генераторы не для создания итераторов, а как «предыдущий» способ реализовать ожидание, не хотел обидеть чувства приверженцев генераторов


      1. arvitaly
        06.12.2018 05:33

        То же самое про колбеки.


  1. kahi4
    05.12.2018 11:40

    Использую js observable (хорошо, хорошо, пока что использую rxjs), async/await/promise совсем иногда.


    1. goss Автор
      05.12.2018 11:46

      rxjs с Angular или отдельно?


      1. kahi4
        05.12.2018 11:54

        С реактом и редуксом. Redux-observable


        Но это в производственной практике, дома по-обстоятельствам, но эти обстоятельства, почему-то, часто по своей природе включают в себя стримы. Ну или я начал все видеть как стримы, как завещал Роб Вормалд.


        Но должен признаться, что пока некоторые конструкции получаются короткими и изящными, другие конструкции получаются огромными и неповоротливыми (считай, нечитаемыми). Но в тех же async/await/promise раздражает невозможность их отмены (cancelation), что приводит либо к обилию Promise.race, либо к более тщательной проверке что не осталось подвисшего замыкания и никакое модальное окно не выскачит вдруг неожиданно на совершенно другой странице.


  1. SaturnTeam
    05.12.2018 11:41

    За что голосовать если в основном используется rxjs?


    1. goss Автор
      05.12.2018 11:44

      мне кажется, скорее за промисы – по стилю и духу они по-моему ближе всего


  1. jehy
    05.12.2018 14:03

    async await позволяет писать очень милый псевдо-синхронный код. Но в случае сложных конструкций без bluebird никуда — иначе никак не сделаешь нормально map+concurrency, delay, timeout, reduce и так далее. К счастью, они очень мило интегрируются, чем мы и пользуемся.


    1. goss Автор
      05.12.2018 14:57

      это действительно мило