Async/await и Promises – это способы выполнения асинхронного кода в Javascript. Они написаны и структурированы по-разному и имеют свои определенные преимущества и недостатки, когда дело доходит до вариантов использования.
Обещания
Промисы появились в ECMAScript 2015 и использовались для обработки асинхронного кода. Он использует ключевое слово .then и .catch, которое обрабатывает как успехи, так и ошибки в коде, а также позволяет разработчикам связывать несколько асинхронных операций в одном интерфейсе.
Выглядит довольно просто?
Что, если мы сможем сделать его более понятным?
Асинхронно/ждите
async/await появился в ECMAScript 2017 и поддерживается во всех современных браузерах. Он используется для запуска асинхронного кода, но написан и структурирован как код в синхронном стиле с использованием ключевых слов async и await.
Выглядит лучше ? верно.
Почему Async/await лучше?
По причинам, указанным ниже, мы можем использовать этот фрагмент кода:
- Читаемость
Код, написанный в async/await, имеет синхронную структуру, что упрощает работу с асинхронным кодом. Одним из наиболее важных навыков разработчика является умение писать чистый, оптимизированный и читабельный код.
Async/await предоставляет более краткие и простые строки кода, которые назначаются переменной, делает их доступными без необходимости цепочки промисов. Кроме того, их легче отлаживать и поддерживать.
2. Обработка ошибок и отладка
Async/await необходимо обернуть внутри блока try/catch, чтобы обрабатывать как успехи, так и ошибки в коде. Вы также можете использовать отладчик, чтобы приостановить выполнение функции в определенный момент, чтобы понять, как обещание разрешается или отклоняется.
В то время как для обещаний это позволяет нам поместить обработчик ошибок в конец цепочки обещаний. Огромным недостатком использования отладчика в цепочке обещаний является объем, поскольку выполнение останавливается только там, где встречается «отладчик».
Использование отладчика в нативных промисах — беспорядок, так как вы должны быть точны при размещении точек останова в цепочке промисов.
Просто взглянув на код, подход с использованием async/await, завернутый в блок try/catch, более организован, поэтому его легче отлаживать.
3. Обработка нескольких значений
Нативное обещание
Обработка нескольких значений в этой цепочке промисов довольно проста, но очень легко потеряться в коде с таким количеством отступов, скобок и прочего. И сложнее определить точки останова для запуска отладчика.
Асинхронно/ждите
Использование async/await для обработки нескольких значений делает строки кода простыми, организованными и читабельными.
Подводные камни
- Совместимость с браузерами: Async/await — это относительно новая языковая функция Javascript, которая может поддерживаться только современными браузерами. В то время как обещания существуют дольше и используются более широко.
- Ошибки/трассировки стека: обработка ошибок в async/await может быть не такой точной, как обработка ошибок с помощью промисов. Ошибки в функции async/await выдаются в другом контексте, в то время как Promises использует catch в конце цепочки обещаний, что является более гибким и точным.
- Обработка нескольких асинхронных операций. Собственные промисы обеспечивают более чистый синтаксис при обработке нескольких асинхронных операций с использованием метода
Promise.all
. Async/await в этом случае может стать слишком многословным.
Вывод :
Использование async/await вместо нативного обещания зависит от предпочтений каждого разработчика. Возможно, существуют более старые кодовые базы, которые все еще написаны в собственном методе обещания, поскольку async/await являются новыми и могут поддерживаться только современными браузерами.
Если вы не обрабатываете несколько асинхронных операций и думаете об эффективности и организации, вам лучше использовать async/await.