Window: подія unhandledrejection

Подія unhandledrejection посилається у глобальну область видимості скрипта, коли об'єкт JavaScript Promise, що не має обробника відхилення, відхиляється; зазвичай, це window, але також може бути Worker (en-US). Це корисно для відлагодження та для надання резервної обробки помилок у неочікуваних ситуаціях.

Спливає Ні
Скасовується Так
Інтерфейс PromiseRejectionEvent
Обробник подій onunhandledrejection

Примітки щодо використання

Дозвіл події unhandledrejection спливати зрештою призведе до виводу повідомлення помилки у консолі. Ви можете запобігти цьому, викликавши preventDefault() (en-US) на інтерфейсі PromiseRejectionEvent; дивіться приклад Запобігання обробці за замовчуванням нижче.

Приклади

Тут ми маємо кілька прикладів, які демонструють, як ви можете скористатись подією unhandledrejection. Подія містить деяку корисну інформацію:

promise
Власне, проміс, який був відхилений, не маючи обробника, який зреагував би на відхилення.
reason
Причина, яка була б передана у обробник відхилення, якби він існував. Дивіться більше інформації у catch().

Базове логування помилки

Цей приклад просто логує інформацію щодо необробленого відхилення проміса у консоль.

window.addEventListener("unhandledrejection", event => {
  console.warn(`НЕОБРОБЛЕНЕ ВІДХИЛЕННЯ ПРОМІСА: ${event.reason}`);
});

Ви також можете скористатись обробником подій onunhandledrejection, щоб налаштувати прослуховувач подій:

window.onunhandledrejection = event => {
  console.warn(`НЕОБРОБЛЕНЕ ВІДХИЛЕННЯ ПРОМІСА: ${event.reason}`);
};

Запобігання обробці за замовчуванням

Багато середовищ (таких як Node.js) за замовчуванням виводять необроблені відхилення промісів у консоль. Ви можете запобігти цьому, додавши обробник для подій unhandledrejection, що — на додачу до будь-яких інших задач, які ви бажаєте виконати — викликає preventDefault() (en-US), щоб скасувати подію, запобігаючи її спливанню та обробці кодом логування під час виконання. Це працює, тому що unhandledrejection скасовується.

window.addEventListener('unhandledrejection', function (event) {
  // ...тут ваш код, який обробляє необроблені відхилення...

  // Запобігти обробці за замовчуванням (наприклад, виводу
  // помилки у консоль)

  event.preventDefault();
});

Специфікації

Специфікація Статус Коментар
HTML Living Standard
The definition of 'unhandledrejection' in that specification.
Living Standard Початкове визначення.

Сумісність з веб-переглядачами

BCD tables only load in the browser

Див. також

[1] Відповідний обробник подій визначений як властивість у домішці WindowEventHandlers, яка доступна як у інтерфейсі Window, так і в усіх типах інтерфейсів Worker (en-US).