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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
---
title: Promise.prototype.catch()
slug: Web/JavaScript/Reference/Global_Objects/Promise/catch
tags:
- ECMAScript6
- JavaScript
- Prototype
- Обещание
- метод
translation_of: Web/JavaScript/Reference/Global_Objects/Promise/catch
---
<div>{{JSRef}}</div>
<p>Метод <strong>catch()</strong> возвращает <code>Promise(</code>обещание) и работает только в случае отклонения обещания. Ведет себя аналогично вызову {{jsxref("Promise.then", "Promise.prototype.then(undefined, onRejected)")}}.</p>
<h2 id="Syntax">Syntax</h2>
<pre class="syntaxbox"><var>p.catch(onRejected)</var>;
p.catch(function(reason) {
// отказ
});
</pre>
<h3 id="Параметры">Параметры</h3>
<dl>
<dt>onRejected</dt>
<dd>{{jsxref("Function")}} вызывается когда обещание отклонено. У этой функции один аргумент:
<dl>
<dt><code>reason</code></dt>
<dd>Причина отказа.</dd>
<dt>
<p>Promise( Обещание ), возвращенное catch (), отклоняется, если onRejected выдает ошибку(throw) или возвращает Promise, который был отклонен; В противном случае Promise, возвращаемый catch () имеет статус выполнено (fulfilled)</p>
</dt>
</dl>
</dd>
</dl>
<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
<p>{{jsxref("Promise")}}.</p>
<h2 id="Описание">Описание</h2>
<dl>
<dd>Метод <code>catch может быть полезен для обработки ошибок</code> в вашей структуре обещаний.</dd>
</dl>
<h2 id="Примеры">Примеры</h2>
<h3 id="Использование_метода_catch">Использование метода <code>catch</code></h3>
<pre class="brush: js">var p1 = new Promise(function(resolve, reject) {
resolve('Success');
});
p1.then(function(value) {
console.log(value); // "Success!"
throw 'oh, no!';
}).catch(function(e) {
// Функция не перевыбросила исключение 'e'
// в результате произойдёт resolve(undefined)
// для Promise, возвращённого функцией catch
console.log(e); // "oh, no!"
}).then(function(){
console.log('after a catch the chain is restored');
}, function () {
// Функция не перевыбросила исключение 'e'
// в результате произойдёт resolve(undefined)
// для Promise, возвращённого функцией catch
console.log('Not fired due to the catch');
});
// Следующий код ведет себя также, как вышенаписанный
p1.then(function(value) {
console.log(value); // "Success!"
return Promise.reject('oh, no!');
}).catch(function(e) {
// Функция не перевыбросила исключение 'e'
// в результате произойдёт resolve(undefined)
// для Promise, возвращённого функцией catch
console.log(e); // "oh, no!"
}).then(function(){
console.log('after a catch the chain is restored');
}, function () {
// Функция не перевыбросила исключение 'e'
// в результате произойдёт resolve(undefined)
// для Promise, возвращённого функцией catch
console.log('Not fired due to the catch');
});
</pre>
<h3 id="Ловим_выброшенные_исключения">Ловим выброшенные исключения</h3>
<pre class="brush: js">// Выкидываемая ошибка вызовет метод catch
var p1 = new Promise(function(resolve, reject) {
throw 'Uh-oh!';
});
p1.catch(function(e) {
console.log(e); // "Uh-oh!"
});
// Ошибки выброшенные из асинхронных функций не будут пойманы методом catch
var p2 = new Promise(function(resolve, reject) {
setTimeout(function() {
throw 'Uncaught Exception!';
}, 1000);
});
p2.catch(function(e) {
console.log(e); // Никогда не вызовется
});
// Ошибки выброшенные после выполнения обещания будут проигнорированны
var p3 = new Promise(function(resolve, reject) {
resolve();
throw 'Silenced Exception!';
});
p3.catch(function(e) {
console.log(e); // Никогда не вызовется
});</pre>
<h2 id="Спецификации">Спецификации</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}</td>
<td>{{Spec2('ES6')}}</td>
<td>Initial definition in an ECMA standard.</td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
<p>{{Compat("javascript.builtins.Promise.catch")}}</p>
<h2 id="Смотри_также">Смотри также</h2>
<ul>
<li>{{jsxref("Promise")}}</li>
<li>{{jsxref("Promise.prototype.then()")}}</li>
</ul>
|