Асинхронное программирование — одна из сильных сторон JavaScript, особенно в Node.js; однако из-за необходимого разделения задач несколько асинхронных операций часто выполняются посредством обратных вызовов, и это может привести к так называемому «аду обратных вызовов». Например, рассмотрим ситуацию, когда мы работаем с вложенными обратными вызовами в нашем коде JavaScript, и давайте посмотрим, как мы можем его реорганизовать, используя Promises и структуру async/await.
Давайте начнем с кода, который использует обратные вызовы для обработки файловых операций для простой системы управления продуктами:
Здесь у нас есть несколько хорошо вложенных обратных вызовов для чтения и записи в файл. Вероятно, это один из случаев, когда вы бы написали, находясь глубоко в аду обратных вызовов. Наконец, при большем количестве асинхронных операций код будет расти, а количество отступов усложнит его чтение. В методе save() функция fs.readFile считывает файл, а затем ее обратный вызов анализирует содержимое и использует функцию fs.writeFile для перезаписи содержимого файла, что выполняется в другом обратном вызове. Такие уровни вложенности делают код похожим на то, что называют «пирамидой гибели».
Чтобы избежать этого ада обратных вызовов, существуют обещания JavaScript и синтаксис async/await, которые делают код более читабельным, управляемым и удобным для отладки.
Вот улучшенная версия:
Промисы полезны, поскольку позволяют управлять асинхронными операциями линейно и с наименьшим количеством вложенных структур. Шаблон async/await повышает читаемость кода, а также обращается к асинхронным операциям таким образом, чтобы они были ближе к синхронным операциям. Используя специально блоки try и catch, обработка ошибок становится более прозрачной и понятной, что способствует удобству сопровождения кода.
Ад обратных вызовов может стать настоящей проблемой при написании кода в чистом виде на JavaScript, особенно в Node.js. С помощью Promises и async/await можно превратить ад сильно вложенных обратных вызовов в чистый линейный код, в то же время упрощая обработку ошибок. Он не только преобразит ваш код, чтобы он выглядел намного лучше, но и направит вас на правильный путь к тому, чтобы стать лучшим программистом JavaScript.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3