Я запустил node.js месяц назад. Первое, с чем я боролся, это асинхронный ввод-вывод. Теперь я к этому несколько привык. Следующее, с чем я сейчас борюсь, - это ад обратных вызовов. Если вы не знаете, что такое ад обратного вызова, посмотрите фиктивный код ниже. Если вы знакомы с адом обратных вызовов, переходите к следующей части.

Ничего особенного. Мы подключились к базе данных. Мы передали функцию в качестве параметра (известную как обратный вызов) для выполнения при установке соединения. Скажем, его имя - обратный вызов соединения. Внутри обратного вызова соединения мы выполнили запрос и передали другой обратный вызов для выполнения при выполнении запроса. Скажем, это обратный вызов выполнения. Внутри обратного вызова выполнения мы закрыли соединение и после закрытия отправили ответ, используя другой обратный вызов.
Примечательно, что мы проверили ошибки в каждом обратном вызове. Если ошибка истинна (не является ни нулевым, ни неопределенным), то мы показали ошибку и больше не выполняли никаких действий.

Теперь посмотрим на код еще раз. Насколько беспорядочным может быть простая 24 строчка кода! В реальных приложениях ад обратных вызовов может быть намного глубже, запутаннее и ужаснее.

Я искал более чистый код, и Promise API меня спас. Если вы не знаете, что такое Promise API, отметьте это в MDN. Давайте посмотрим, как мы обещаем выбраться из ада обратных вызовов. Проверьте следующий фрагмент кода.

Во фрагменте кода мы преобразовали каждый из наших обратных вызовов в обещание. API обещания прост. Передайте обратный вызов constructor. Обратный вызов примет два параметра resolve и reject. Внутри обратного вызова вы сделаете свою работу. Если это произойдет, напишите вызов resolve, а если что-то пойдет не так, вызовите reject.

Затем используйте эти обещания, как в следующем фрагменте кода.

В API обещаний вы просто вызываете функцию, которая возвращает обещание. Затем соедините then функцию. Функция then принимает обратный вызов, который будет выполняться при вызове resolve с тем же параметром, переданным в then. Вы можете добавить функцию catch в цепочку. Обратный вызов, переданный в функцию catch, выполняется, если вызывается reject и, очевидно, с тем же параметром. Обратите внимание, что ни resolve, ни reject не могут передавать более одного параметра. Итак, если вам нужно передать более одного параметра, вам нужно объединить их в один объект.

А сейчас до свидания. Добрый день!