diff options
Diffstat (limited to 'files/uk/web/javascript/reference/global_objects/promise/catch/index.html')
-rw-r--r-- | files/uk/web/javascript/reference/global_objects/promise/catch/index.html | 189 |
1 files changed, 0 insertions, 189 deletions
diff --git a/files/uk/web/javascript/reference/global_objects/promise/catch/index.html b/files/uk/web/javascript/reference/global_objects/promise/catch/index.html deleted file mode 100644 index 7e84771513..0000000000 --- a/files/uk/web/javascript/reference/global_objects/promise/catch/index.html +++ /dev/null @@ -1,189 +0,0 @@ ---- -title: Promise.prototype.catch() -slug: Web/JavaScript/Reference/Global_Objects/Promise/catch -tags: - - ECMAScript 2015 - - JavaScript - - Promise - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/catch ---- -<div>{{JSRef}}</div> - -<p>Метод <code><strong>catch()</strong></code> вертає {{jsxref("Promise","проміс")}} та має справу лише з відхиленнями. Він поводиться так само, як виклик {{jsxref("Promise.then", "Promise.prototype.then(undefined, onRejected)")}} (насправді, <code>obj.catch(onRejected)</code> здійснює внутрішній виклик <code>obj.then(undefined, onRejected)</code>). Це означає, що ви маєте надати функцію <code>onRejected</code>, навіть якщо хочете отримати повернене значення <code>undefined</code> - наприклад, <code>obj.catch(() => {})</code>.</p> - -<div>{{EmbedInteractiveExample("pages/js/promise-catch.html")}}</div> - - - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox"><var>p</var>.catch(<var>onRejected</var>); - -p.catch(function(<var>reason</var>) { - // відхилення -}); -</pre> - -<h3 id="Параметри">Параметри</h3> - -<dl> - <dt><code><var>onRejected</var></code></dt> - <dd>{{jsxref("Function","Функція")}}, що викликається, коли об'єкт <code>Promise</code> відхилено. Ця функція має один аргумент: - <dl> - <dt><code><var>reason</var></code></dt> - <dd>Причина відхилення.</dd> - </dl> - Проміс, повернений методом <code>catch()</code>, відхиляється, якщо <code>onRejected</code> викидає помилку або повертає проміс, що сам є відхиленим; інакше, він вирішується.</dd> -</dl> - -<h3 id="Значення_що_повертається">Значення, що повертається</h3> - -<p>Здійснює внутрішній виклик <code>Promise.prototype.then</code> на об'єкті, на якому був викликаний, передаючи параметри <code>undefined</code> та отриманий обробник <code>onRejected</code>. Повертає значення цього виклику, тобто, {{jsxref("Promise")}}.</p> - -<div class="warning"> -<p>Зауважте, що наведені нижче приклади викидають екземпляри <a href="/uk/docs/Web/JavaScript/Reference/Global_Objects/Error">Error</a>. Це вважається гарною практикою у порівнянні з викиданням рядків: Інакше та частина, що здійснює перехоплення, була б змушена робити перевірки, щоб дізнатись, чи є аргумент рядком, чи помилкою, і ви могли б втратити цінну інформацію, таку як траси стеків.</p> -</div> - -<p><strong>Демонстрація внутрішнього виклику:</strong></p> - -<pre class="brush: js">// заміщуємо початковий Promise.prototype.then/catch, щоб додати трохи логів -(function(Promise){ - var originalThen = Promise.prototype.then; - var originalCatch = Promise.prototype.catch; - - Promise.prototype.then = function(){ - console.log('> > > > > > викликано .then на %o з аргументами: %o', this, arguments); - return originalThen.apply(this, arguments); - }; - Promise.prototype.catch = function(){ - console.error('> > > > > > викликано .catch на %o з аргументами: %o', this, arguments); - return originalCatch.apply(this, arguments); - }; - -})(this.Promise); - - - -// викликаємо catch на вже вирішеному промісі -Promise.resolve().catch(function XXX(){}); - -// виводить: -// > > > > > > викликано .catch на Promise{} з аргументами: Arguments{1} [0: function XXX()] -// > > > > > > викликано .then на Promise{} з аргументами: Arguments{2} [0: undefined, 1: function XXX()] -</pre> - -<h2 id="Опис">Опис</h2> - -<p>Метод <code>catch</code> використовується для обробки помилок у композиції промісів. Оскільки він вертає {{jsxref("Promise","проміс")}}, його <a href="/uk/docs/Web/JavaScript/Guide/Using_promises#Chaining_after_a_catch">можна додавати в ланцюги</a> так само, як метод {{jsxref("Promise.then", "then()")}}.</p> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Використання_та_ланцюгування_метода_catch">Використання та ланцюгування метода <code>catch</code></h3> - -<pre class="brush: js">var p1 = new Promise(function(resolve, reject) { - resolve('Успіх!'); -}); - -p1.then(function(value) { - console.log(value); // "Успіх!" - throw new Error('о, ні!'); -}).catch(function(e) { - console.error(e.message); // "о, ні!" -}).then(function(){ - console.log('після catch ланцюг відновлено'); -}, function () { - console.log('Не запуститься через catch'); -}); - -// Наступний код поводиться так само -p1.then(function(value) { - console.log(value); // "Успіх!" - return Promise.reject('о, ні!'); -}).catch(function(e) { - console.error(e); // "о, ні!" -}).then(function(){ - console.log('після catch ланцюг відновлено'); -}, function () { - console.log('Не запуститься через catch'); -}); -</pre> - -<h3 id="Підводні_камені_при_викиданні_помилок">Підводні камені при викиданні помилок</h3> - -<pre class="brush: js">// Викидання помилок викличе метод catch у більшості випадків -var p1 = new Promise(function(resolve, reject) { - throw new Error('Ой-ой!'); -}); - -p1.catch(function(e) { - console.error(e); // "Ой-ой!" -}); - -// Помилки, викинуті всередині асинхронних функцій, поводитимуться, як неперехоплені -var p2 = new Promise(function(resolve, reject) { - setTimeout(function() { - throw new Error('Неперехоплений виняток!'); - }, 1000); -}); - -p2.catch(function(e) { - console.error(e); // Це ніколи не виконається -}); - -// Помилки, викинуті після виклику resolve, глушаться -var p3 = new Promise(function(resolve, reject) { - resolve(); - throw new Error('Заглушений виняток!'); -}); - -p3.catch(function(e) { - console.error(e); // Це ніколи не виконається -});</pre> - -<h3 id="Якщо_він_вирішений">Якщо він вирішений</h3> - -<pre class="brush: js">//Створюємо проміс, що не викличе onReject -var p1 = Promise.resolve("виклик наступного"); - -var p2 = p1.catch(function (reason) { - //Це ніколи не буде викликано - console.error("перехоплено p1!"); - console.error(reason); -}); - -p2.then(function (value) { - console.log("onFulfilled наступного проміса"); /* onFulfilled наступного проміса */ - console.log(value); /* виклик наступного */ -}, function (reason) { - console.log("onRejected наступного проміса"); - console.log(reason); -});</pre> - -<h2 id="Специфікації">Специфікації</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Специфікація</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{SpecName('ESDraft', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}</td> - </tr> - </tbody> -</table> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - -<p class="hidden">To contribute to this compatibility data, please write a pull request against this repository: <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</p> - -<p>{{Compat("javascript.builtins.Promise.catch")}}</p> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>{{jsxref("Promise")}}</li> - <li>{{jsxref("Promise.prototype.then()")}}</li> -</ul> |