Window: подія unhandledrejection

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

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

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

Дозвіл події unhandledrejection спливати зрештою призведе до виводу повідомлення помилки у консолі. Ви можете запобігти цьому, викликавши preventDefault() на інтерфейсі 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(), щоб скасувати подію, запобігаючи її спливанню та обробці кодом логування під час виконання. Це працює, тому що unhandledrejection скасовується.

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

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

  event.preventDefault();
});

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

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

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

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung Internet
unhandledrejection eventChrome Full support 49Edge Full support ≤79Firefox Full support 69
Full support 69
Full support 68
Disabled
Disabled From version 68: this feature is behind the dom.promise_rejection_events.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.
IE No support NoOpera Full support 36Safari Full support 11WebView Android Full support 49Chrome Android Full support 49Firefox Android Full support 68
Disabled
Full support 68
Disabled
Disabled From version 68: this feature is behind the dom.promise_rejection_events.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.
Opera Android Full support 36Safari iOS Full support 11.3Samsung Internet Android Full support 5.0

Legend

Full support  
Full support
No support  
No support
User must explicitly enable this feature.
User must explicitly enable this feature.

Див. також

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