aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/global_objects/promise/catch/index.html
diff options
context:
space:
mode:
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.html189
1 files changed, 189 insertions, 0 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
new file mode 100644
index 0000000000..7e84771513
--- /dev/null
+++ b/files/uk/web/javascript/reference/global_objects/promise/catch/index.html
@@ -0,0 +1,189 @@
+---
+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(() =&gt; {})</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('&gt; &gt; &gt; &gt; &gt; &gt; викликано .then на %o з аргументами: %o', this, arguments);
+ return originalThen.apply(this, arguments);
+ };
+ Promise.prototype.catch = function(){
+ console.error('&gt; &gt; &gt; &gt; &gt; &gt; викликано .catch на %o з аргументами: %o', this, arguments);
+ return originalCatch.apply(this, arguments);
+ };
+
+})(this.Promise);
+
+
+
+// викликаємо catch на вже вирішеному промісі
+Promise.resolve().catch(function XXX(){});
+
+// виводить:
+// &gt; &gt; &gt; &gt; &gt; &gt; викликано .catch на Promise{} з аргументами: Arguments{1} [0: function XXX()]
+// &gt; &gt; &gt; &gt; &gt; &gt; викликано .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>