Загрузка…
Загрузка…
Node.js внутри использует однопоточный цикл обработки событий для обработки событий в очереди. Но такой подход может привести к блокировке всего процесса, если задача выполняется дольше, чем ожидалось.
Node.js решает эту проблему путем включения обратных вызовов, также известных как функции высшего порядка. Поэтому всякий раз, когда длительный процесс завершает свое выполнение, он запускает соответствующий обратный вызов.
иногда это может привести к созданию сложного и нечитаемого кода. Скорее нет. обратных вызовов, тем длиннее будет цепочка возвращаемых обратных вызовов.
Есть четыре решения, которые могут решить проблему ада обратных вызовов.
Сделайте свою программу модульной
Он предлагает разделить логику на более мелкие модули. А затем соедините их вместе из основного модуля для достижения желаемого результата.
Использовать асинхронный механизм
Это широко используемый модуль Node.js, обеспечивающий последовательный поток выполнения.
Модуль async имеет API <async.waterfall>, который передает данные от одной операции к другой, используя следующий обратный вызов.
Другой асинхронный API <async.map> позволяет параллельно перебирать список элементов и выполнять обратный вызов с другим списком результатов.
При асинхронном подходе обратный вызов вызывающей стороны вызывается только один раз. Вызывающий здесь метод — это основной метод, использующий модуль async.
Используйте механизм обещаний
Промисы предоставляют альтернативный способ написания асинхронного кода. Они либо возвращают результат выполнения, либо ошибку/исключение. Реализация обещаний требует использования функции <.then()>, которая ожидает возврата объекта обещания. Он принимает два необязательных аргумента, оба функции. В зависимости от состояния промиса будет вызван только один из них. Первый вызов функции продолжается, если обещание выполнено. Однако если обещание будет отклонено, будет вызвана вторая функция.
Используйте генераторы
Генераторы — это облегченные процедуры, они заставляют функцию ждать и возобновлять работу с помощью ключевого слова доходности. Функции-генераторы используют специальный синтаксис <function* ()>. Они также могут приостанавливать и возобновлять асинхронные операции с помощью таких конструкций, как промисы или , и превращать синхронный код в асинхронный.
Ключевой вывод для интервью: как избежать ада обратных вызовов в Node.js?
