1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
---
title: 'Window: подія unhandledrejection'
slug: Web/API/Window/unhandledrejection_event
tags:
- API
- Event
- HTML DOM
- JavaScript
- Promise
- Window
- Worker
- unhandledrejection
- Проміс
- відхилення
- подія
translation_of: Web/API/Window/unhandledrejection_event
---
<div>{{APIRef("HTML DOM")}}</div>
<p><span class="seoSummary">Подія <strong><code>unhandledrejection</code></strong> посилається у глобальну область видимості скрипта, коли об'єкт JavaScript {{jsxref("Promise")}}, що не має обробника відхилення, відхиляється; зазвичай, це {{domxref("window")}}, але також може бути {{domxref("Worker")}}.</span> Це корисно для відлагодження та для надання резервної обробки помилок у неочікуваних ситуаціях.</p>
<table class="properties">
<tbody>
<tr>
<th scope="row">Спливає</th>
<td>Ні</td>
</tr>
<tr>
<th scope="row">Скасовується</th>
<td>Так</td>
</tr>
<tr>
<th scope="row">Інтерфейс</th>
<td>{{domxref("PromiseRejectionEvent")}}</td>
</tr>
<tr>
<th scope="row">Обробник подій</th>
<td>{{domxref("WindowEventHandlers.onunhandledrejection", "onunhandledrejection")}}</td>
</tr>
</tbody>
</table>
<h2 id="Примітки_щодо_використання">Примітки щодо використання</h2>
<p>Дозвіл події <code>unhandledrejection</code> спливати зрештою призведе до виводу повідомлення помилки у консолі. Ви можете запобігти цьому, викликавши {{domxref("Event.preventDefault", "preventDefault()")}} на інтерфейсі {{domxref("PromiseRejectionEvent")}}; дивіться приклад {{anch("Запобігання обробці за замовчуванням")}} нижче.</p>
<h2 id="Приклади">Приклади</h2>
<p>Тут ми маємо кілька прикладів, які демонструють, як ви можете скористатись подією <code>unhandledrejection</code>. Подія містить деяку корисну інформацію:</p>
<dl>
<dt><code>promise</code></dt>
<dd>Власне, {{jsxref("Promise","проміс")}}, який був відхилений, не маючи обробника, який зреагував би на відхилення.</dd>
<dt><code>reason</code></dt>
<dd>Причина, яка була б передана у обробник відхилення, якби він існував. Дивіться більше інформації у {{jsxref("Promise.catch", "catch()")}}.</dd>
</dl>
<h3 id="Базове_логування_помилки">Базове логування помилки</h3>
<p>Цей приклад просто логує інформацію щодо необробленого відхилення проміса у консоль.</p>
<pre class="brush:js;">window.addEventListener("unhandledrejection", event => {
console.warn(`НЕОБРОБЛЕНЕ ВІДХИЛЕННЯ ПРОМІСА: ${event.reason}`);
});
</pre>
<p>Ви також можете скористатись обробником подій {{domxref("WindowEventHandlers.onunhandledrejection", "onunhandledrejection")}}, щоб налаштувати прослуховувач подій:</p>
<pre class="brush: js">window.onunhandledrejection = event => {
console.warn(`НЕОБРОБЛЕНЕ ВІДХИЛЕННЯ ПРОМІСА: ${event.reason}`);
};
</pre>
<h3 id="Запобігання_обробці_за_замовчуванням">Запобігання обробці за замовчуванням</h3>
<p>Багато середовищ (таких як {{Glossary("Node.js")}}) за замовчуванням виводять необроблені відхилення промісів у консоль. Ви можете запобігти цьому, додавши обробник для подій <code>unhandledrejection</code>, що — на додачу до будь-яких інших задач, які ви бажаєте виконати — викликає {{domxref("Event.preventDefault()", "preventDefault()")}}, щоб скасувати подію, запобігаючи її спливанню та обробці кодом логування під час виконання. Це працює, тому що <code>unhandledrejection</code> скасовується.</p>
<pre class="brush:js;">window.addEventListener('unhandledrejection', function (event) {
// ...тут ваш код, який обробляє необроблені відхилення...
// Запобігти обробці за замовчуванням (наприклад, виводу
// помилки у консоль)
event.preventDefault();
});
</pre>
<h2 id="Специфікації">Специфікації</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Специфікація</th>
<th scope="col">Статус</th>
<th scope="col">Коментар</th>
</tr>
<tr>
<td>{{SpecName('HTML WHATWG', 'webappapis.html#unhandled-promise-rejections', 'unhandledrejection')}}</td>
<td>{{Spec2('HTML WHATWG')}}</td>
<td>Початкове визначення.</td>
</tr>
</tbody>
</table>
<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>
<p>{{Compat("api.Window.unhandledrejection_event")}}</p>
<h2 id="Див._також">Див. також</h2>
<ul>
<li>{{SectionOnPage("/uk/docs/Web/JavaScript/Guide/Using_promises", "Події відхилення промісів")}}</li>
<li>Обробник подій {{domxref("WindowEventHandlers.onunhandledrejection", "onunhandledrejection")}}<sup><a href="#seealso-footnote-1">1</a></sup></li>
<li>Подія <a href="/uk/docs/Web/API/Window/rejectionhandled_event">rejectionhandled</a></li>
<li>{{jsxref("Promise")}}</li>
</ul>
<p><a id="seealso-footnote-1" name="seealso-footnote-1">[1]</a> Відповідний обробник подій визначений як властивість у домішці {{domxref("WindowEventHandlers")}}, яка доступна як у інтерфейсі {{domxref("Window")}}, так і в усіх типах інтерфейсів {{domxref("Worker")}}.</p>
|