diff options
Diffstat (limited to 'files/ru/web/javascript/reference/global_objects/promise/catch/index.html')
-rw-r--r-- | files/ru/web/javascript/reference/global_objects/promise/catch/index.html | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/files/ru/web/javascript/reference/global_objects/promise/catch/index.html b/files/ru/web/javascript/reference/global_objects/promise/catch/index.html new file mode 100644 index 0000000000..dee70fbc24 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/promise/catch/index.html @@ -0,0 +1,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> |