«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как обрабатывать ошибки в асинхронных обратных вызовах, выходящие за рамки обещания?

Как обрабатывать ошибки в асинхронных обратных вызовах, выходящие за рамки обещания?

Опубликовано 4 ноября 2024 г.
Просматривать:801

How Can You Handle Errors in Asynchronous Callbacks That Are Not Within a Promise\'s Scope?

Асинхронная обработка ошибок с помощью цепочки обещаний

При работе с асинхронным кодом крайне важно подумать о том, как эффективно обрабатывать ошибки. Неперехваченные исключения могут привести к сбою вашего приложения, поэтому важно иметь соответствующую стратегию.

В описанном сценарии создается промис с setTimeout, который выдает ошибку. Обработчик catch Bluebird Promise не перехватывает эту ошибку, поскольку она возникает в асинхронном обратном вызове.

Обработка исключений внутри промисов

Однако промисы могут перехватывать исключения, возникающие внутри промисов. свои собственные функции обратного вызова. Чтобы обработать этот тип ошибки, вы можете:

function getPromise() {
  return new Promise(function(done, reject) {
    setTimeout(done, 500);
  }).then(function() {
    console.log("hihihihi");
    throw new Error("Oh no!");
  });
}

Здесь ошибка выдается в обратном вызове then, что гарантирует, что она будет перехвачена обработчиком перехвата Promise.

Предостережения по поводу асинхронных обратных вызовов

Очень важно помнить, что промисы не перехватывают исключения из асинхронных обратных вызовов, которые не входят в их компетенцию. Чтобы справиться с этими типами ошибок, рассмотрите следующее:

  1. Использование Promise.delay: Promise.delay оборачивает асинхронный обратный вызов для возврата обещания. Любые ошибки, возникающие в обратном вызове, будут перехвачены обещанием.
  2. Отклонение окружающего обещания: по возможности отклоняйте обещание, окружающее асинхронный обратный вызов, вместо того, чтобы создавать исключение.

Пример обработки несанкционированных асинхронных обратных вызовов

Чтобы обработать несанкционированный асинхронный обратный вызов в Node.js или браузере, вы можете использовать следующий подход:

function getPromise() {
  return new Promise(function(done, reject) {
    setTimeout(function() {
      try {
        // Your rogue async callback here
        console.log("hihihihi");
      } catch (e) {
        reject(e);
      }
    }, 500);
  });
}

Посредством ручной обработки любых исключений в обратном вызове этот подход гарантирует, что они не приведут к сбою вашего приложения.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3