Избавьтесь от «ада обратных вызовов» с помощью этого нового способа обработки синхронных задач в вашем Javascript.

Теперь, когда был выпущен Node 8, Async/Await полностью поддерживается.

Он решает проблему ада обратных вызовов в JavaScript-коде Node.js.

Вдохновленный функцией Async/Await C#, Async/Await позволяет вам писать функции, которые блокируются при каждой асинхронной операции, ожидая результатов, прежде чем продолжить выполнение следующего оператора.

Этот пост 6 причин, почему Async/Await в JavaScript не дает обещаний» убедил меня попробовать рефакторинг.

Я резюмирую основные моменты, которые сделал автор.

6 причин, почему Async/Await лучше

1. Лаконичный и чистый

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

2. Обработка ошибок

Блок catch теперь может обрабатывать асинхронные ошибки, требуя только одного перехвата для всей цепочки.

3. Условные операторы

Значительно упростите условные операторы и устраните вложенность, дополнительные фигурные скобки и избыточные операторы возврата.

4. Промежуточные значения

В ситуациях, когда обещание 3 использует данные из обещания 2 для выполнения запроса, асинхронное ожидание может сократить необходимый код до 1/4 строки.

5. Стеки ошибок

С длинными цепочками обещаний promises/then очень затрудняет определение того, какое обещание нарушилось. try/catch позволяет сообщить о любом сбое в цепочке без дублирования кода.

6. Отладка

Стрелочные функции не могут возвращать выражения, асинхронное ожидание позволяет избежать стрелочных функций, использование «отладчика» правильно работает с асинхронным ожиданием/странным перешагиванием функций с then().

Примеры кода

Я писал скрипт SeleniumWebdriver и начал с того, что заставил его почти правильно работать, используя промисы и .then(). Я решил попробовать преобразовать его в асинхронную структуру ожидания.

Оказывается, это не только казалось более чистым способом написания, но и полностью исправило странное поведение, основанное на времени, которое я испытывал. Это исправило мою ошибку.

Обещания ES6/.then()

ES8 асинхронный/ожидание

Итак, вы можете видеть, что…

  1. Я смог удалить все функции стрелок
  2. Свести 3 слоя вложенности в 1
  3. Добавьте обработку ошибок к 5 обещаниям с помощью 1 строки кода

Мне очень нравится асинхронное ожидание ES8, и я определенно рекомендую вам попробовать его.