Как стать автором
Обновить

Комментарии 19

В чем преимущество такого подхода?

Перед чем?

Перед использованием async await

Это не подход. Это объяснение (возможного) внутреннего устройства async/await. А писать код лучше с async/await, естественно.

Кстати, если вы возьмёте код с async/await и прогоните его через транспилятор, чтобы получить код для старого браузера – тоже получите что-то подобное. Довольно неудобно отлаживать будет :-)

Было интересно, но:

Именно это делают транспиляторы вроде Babel при преобразовании async/await в более старые версии JS, где этой функциональности ещё не было. Если вы взглянете на транспилированный код, то сможете провести множество параллелей с нашей реализацией.

Так может пусть и дальше этим занимаются транспиляторы? а мы будем использовать уже всем знакомый async/await? А то в вебе и так зоопарк подходов и разных технологий...

Так статья про "Принцип работы async/await в JavaScript"

в ней предлагается все же окунуться в это дело. Конкретнее - в разделе  *Дальнейшие шаги*. Вот поэтому я и предложил так не делать и не пытаться. А если все таки сильно хочется и есть идее лучше, чем сейчас, то тогда сделать пул-реквест в какой-нибудь транспилятор. И если его примут, то я бы с радостью почитал про то, что и как было улучшено.

А что, кто-то предлагал так и писать? 8-O

Близкая аналогия: порой полезно знать, как C компилируется в машинный код, но это не повод писать сразу машинный код.

Видимо все читали ночью как и я )) Я думал это призыв к действию, а не подкапотная работа) С утра перечитал и все стало ясно)

вы все правильно думали и внимательно прочитали.

Я хочу оставить эту доработку в качестве упражнения для вас, так как она окажется аналогична реализации успешного пути, и отличаться будут только используемые функции

А вы читали статью ?

Да. Я читал. Типичная статья вида "реализуем сами, чтобы понять, как оно устроено". Много я таких видел.

ЗЫ: Типичный пример таких статей – "напишем собственную реализацию LISP". И там тоже примерно всегда оставляются какие-то упражнения для самостоятельного решения.

Еще раз. Ваше вообщение:

А что, кто-то предлагал так и писать? 8-O

Моя цитата из прочитанной вами статьи:

Я хочу оставить эту доработку в качестве упражнения для вас, так как она окажется аналогична реализации успешного пути, и отличаться будут только используемые функции

и мой ответ в самом первом комментарии:

Так может пусть и дальше этим занимаются транспиляторы? а мы будем использовать уже всем знакомый async/await? ...

Но да ладно, чет я и так слишком "душнила" в этом треде... Сорян, мир вам

Мир, но подушню в ответ: реализовывать автор предлагает именно в качестве упражнения, а не для реального использования.

No comments... like ))

Имея приведённый выше код и соответствующий вывод, можем ли мы переписать функцию main() без использования async и await, по-прежнему получив тот же результат?
Не использовать цепочки промисов в main().
Очень долго пытался понять, что имел в виду автор такими условиями.
Например:
— В main нельзя использовать цепочки промисов и await, а в других функциях (вызываемых из main) — можно?
— Один вызов then, результат которого не используется, — это уже цепочка? Без then() и await воспользоваться промисом, который возвращает функция wait() не получится.

Какая реализация соответствует духу задачи? (да, я знаю, что это перевод)

Ну вот, например, вариант, написанный за 3 минуты. «Цепочек» в main(), вроде, нет:
async function main() {
  console.log('Entry');

  return new Promise(resolve => {
    wait().then(result => {
      console.log(result);
      console.log('Exit');
      resolve('Return');
    });
  });
}

Глупый вопрос: откуда взята функция wait()?

В каком смысле "откуда"? Она же в самом начале статьи объявлена.

Протупил :( Спасибо!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий