From 95aca4b4d8fa62815d4bd412fff1a364f842814a Mon Sep 17 00:00:00 2001 From: Ryan Johnson Date: Thu, 29 Apr 2021 16:16:42 -0700 Subject: remove retired locales (#699) --- .../global_objects/promise/all/index.html | 232 ---------------- .../global_objects/promise/allsettled/index.html | 61 ----- .../global_objects/promise/any/index.html | 86 ------ .../global_objects/promise/catch/index.html | 189 ------------- .../global_objects/promise/finally/index.html | 103 ------- .../reference/global_objects/promise/index.html | 232 ---------------- .../global_objects/promise/promise/index.html | 77 ------ .../global_objects/promise/race/index.html | 177 ------------ .../global_objects/promise/reject/index.html | 74 ----- .../global_objects/promise/resolve/index.html | 137 ---------- .../global_objects/promise/then/index.html | 297 --------------------- 11 files changed, 1665 deletions(-) delete mode 100644 files/uk/web/javascript/reference/global_objects/promise/all/index.html delete mode 100644 files/uk/web/javascript/reference/global_objects/promise/allsettled/index.html delete mode 100644 files/uk/web/javascript/reference/global_objects/promise/any/index.html delete mode 100644 files/uk/web/javascript/reference/global_objects/promise/catch/index.html delete mode 100644 files/uk/web/javascript/reference/global_objects/promise/finally/index.html delete mode 100644 files/uk/web/javascript/reference/global_objects/promise/index.html delete mode 100644 files/uk/web/javascript/reference/global_objects/promise/promise/index.html delete mode 100644 files/uk/web/javascript/reference/global_objects/promise/race/index.html delete mode 100644 files/uk/web/javascript/reference/global_objects/promise/reject/index.html delete mode 100644 files/uk/web/javascript/reference/global_objects/promise/resolve/index.html delete mode 100644 files/uk/web/javascript/reference/global_objects/promise/then/index.html (limited to 'files/uk/web/javascript/reference/global_objects/promise') diff --git a/files/uk/web/javascript/reference/global_objects/promise/all/index.html b/files/uk/web/javascript/reference/global_objects/promise/all/index.html deleted file mode 100644 index 156b5f499f..0000000000 --- a/files/uk/web/javascript/reference/global_objects/promise/all/index.html +++ /dev/null @@ -1,232 +0,0 @@ ---- -title: Promise.all() -slug: Web/JavaScript/Reference/Global_Objects/Promise/all -tags: - - ECMAScript 2015 - - JavaScript - - Promise - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all ---- -
{{JSRef}}
- -

Метод Promise.all() повертає єдиний {{jsxref("Promise","проміс")}}, який виконується, коли усі проміси, передані у вигляді ітерабельного об'єкта, були виконані, або коли ітерабельний об'єкт не містить жодного проміса. Він відхиляється з причиною першого відхиленого проміса.

- -

Зазвичай використовується після того, як були запущені асинхронні задачі, що виконуються конкурентно, та були створені проміси для їхніх результатів, щоб мати змогу зачекати, доки усі задачі не будуть виконані.

- -
{{EmbedInteractiveExample("pages/js/promise-all.html")}}
- - - -

Синтаксис

- -
Promise.all(iterable);
- -

Параметри

- -
-
iterable
-
Ітерабельний об'єкт, такий як {{jsxref("Array")}}.
-
- -

Значення, що повертається

- - - -

Опис

- -

Цей метод може бути корисним для збирання результатів множини промісів.

- -

Виконання

- -

Повернений проміс виконується з масивом, що містить усі значення ітерабельного об'єкта, переданого в якості аргумента (також значення, що не є промісами).

- - - -

Відхилення

- -

Якщо будь-який з переданих промісів відхиляється, Promise.all асинхронно відхиляється зі значенням відхиленого проміса, незалежно від того, чи були вирішені інші проміси.

- -

Приклади

- -

Використання Promise.all

- -

Promise.all чекає на усі виконання (або на перше відхилення).

- -
var p1 = Promise.resolve(3);
-var p2 = 1337;
-var p3 = new Promise((resolve, reject) => {
-  setTimeout(() => {
-    resolve("foo");
-  }, 100);
-});
-
-Promise.all([p1, p2, p3]).then(values => {
-  console.log(values); // [3, 1337, "foo"]
-});
- -

Якщо ітерабельний об'єкт містить значення, що не є промісами, вони будуть проігноровані, але все одно міститимуться у поверненому масиві проміса (якщо проміс виконається):

- -
// рахуватиметься, ніби передано порожній ітерабельний об'єкт, отже, він виконається
-var p = Promise.all([1,2,3]);
-// рахуватиметься, ніби переданий ітерабельний об'єкт містить лише вирішений проміс зі значенням "444", отже, він виконається
-var p2 = Promise.all([1,2,3, Promise.resolve(444)]);
-// рахуватиметься, ніби переданий ітерабельний об'єкт містить лише відхилений проміс зі значенням "555", отже, він буде відхилений
-var p3 = Promise.all([1,2,3, Promise.reject(555)]);
-
-// використовуючи setTimeout, ми можемо виконати код після того, як стек стане порожнім
-setTimeout(function() {
-    console.log(p);
-    console.log(p2);
-    console.log(p3);
-});
-
-// виводить
-// Promise { <state>: "fulfilled", <value>: Array[3] }
-// Promise { <state>: "fulfilled", <value>: Array[4] }
-// Promise { <state>: "rejected", <reason>: 555 }
- -

Асинхронність або синхронність Promise.all

- -

Наступний приклад демонструє асинхронність (або синхронність, якщо передано порожній ітерабельний об'єктPromise.all:

- -
// ми передаємо в якості аргумента масив вже вирішених промісів,
-// щоб запустити Promise.all якомога швидше
-var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
-
-var p = Promise.all(resolvedPromisesArray);
-// негайно виводимо значення p
-console.log(p);
-
-// використовуючи setTimeout, ми можемо виконати код після того, як стек стане порожнім
-setTimeout(function() {
-    console.log('стек тепер порожній');
-    console.log(p);
-});
-
-// виводить, в порядку:
-// Promise { <state>: "pending" }
-// стек тепер порожній
-// Promise { <state>: "fulfilled", <value>: Array[2] }
-
- -

Те саме відбувається, якщо Promise.all відхиляється:

- -
var mixedPromisesArray = [Promise.resolve(33), Promise.reject(44)];
-var p = Promise.all(mixedPromisesArray);
-console.log(p);
-setTimeout(function() {
-    console.log('стек тепер порожній');
-    console.log(p);
-});
-
-// виводить
-// Promise { <state>: "pending" }
-// стек тепер порожній
-// Promise { <state>: "rejected", <reason>: 44 }
-
- -

Promise.all вирішується синхронно лише тоді, коли переданий ітерабельний об'єкт є порожнім:

- -
var p = Promise.all([]); // буде негайно вирішений
-// значення, що не є промісами, будуть проігноровані, але обчислення відбуватиметься асинхронно
-var p2 = Promise.all([1337, "привіт"]);
-console.log(p);
-console.log(p2)
-setTimeout(function() {
-    console.log('стек тепер порожній');
-    console.log(p2);
-});
-
-// виводить
-// Promise { <state>: "fulfilled", <value>: Array[0] }
-// Promise { <state>: "pending" }
-// стек тепер порожній
-// Promise { <state>: "fulfilled", <value>: Array[2] }
- -

Швидке відхилення у Promise.all

- -

Promise.all відхиляється, якщо будь-який з його елементів було відхилено. Наприклад, якщо ви передаєте чотири проміси, які вирішуються після затримки, та один проміс, який негайно відхиляється, тоді Promise.all буде негайно відхилено.

- -
var p1 = new Promise((resolve, reject) => {
-  setTimeout(() => resolve('один'), 1000);
-});
-var p2 = new Promise((resolve, reject) => {
-  setTimeout(() => resolve('два'), 2000);
-});
-var p3 = new Promise((resolve, reject) => {
-  setTimeout(() => resolve('три'), 3000);
-});
-var p4 = new Promise((resolve, reject) => {
-  setTimeout(() => resolve('чотири'), 4000);
-});
-var p5 = new Promise((resolve, reject) => {
-  reject(new Error('відхилено'));
-});
-
-
-// Використовуємо .catch:
-Promise.all([p1, p2, p3, p4, p5])
-.then(values => {
-  console.log(values);
-})
-.catch(error => {
-  console.error(error.message)
-});
-
-//Виведе:
-//"відхилено"
-
-
- -

Цю поведінку можливо змінити, обробивши можливі відхилення:

- -
var p1 = new Promise((resolve, reject) => {
-  setTimeout(() => resolve('p1_відкладене_вирішення'), 1000);
-});
-
-var p2 = new Promise((resolve, reject) => {
-  reject(new Error('p2_негайне_відхилення'));
-});
-
-Promise.all([
-  p1.catch(error => { return error }),
-  p2.catch(error => { return error }),
-]).then(values => {
-  console.log(values[0]) // "p1_відкладене_вирішення"
-  console.error(values[1]) // "Error: p2_негайне_відхилення"
-})
-
- -

Специфікації

- - - - - - - - - - -
Специфікація
{{SpecName('ESDraft', '#sec-promise.all', 'Promise.all')}}
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Promise.all")}}

- -

Див. також

- - diff --git a/files/uk/web/javascript/reference/global_objects/promise/allsettled/index.html b/files/uk/web/javascript/reference/global_objects/promise/allsettled/index.html deleted file mode 100644 index 98b87dd1e8..0000000000 --- a/files/uk/web/javascript/reference/global_objects/promise/allsettled/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Promise.allSettled() -slug: Web/JavaScript/Reference/Global_Objects/Promise/allSettled -tags: - - JavaScript - - Promise - - allSettled - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/allSettled ---- -

{{JSRef}}

- -

Метод Promise.allSettled() повертає проміс, який вирішується після того, як усі надані проміси були або вирішені, або відхилені, з масивом об'єктів, що містять результат кожного проміса.

- -
{{EmbedInteractiveExample("pages/js/promise-allsettled.html")}}
- -

Синтаксис

- -
Promise.allSettled(iterable);
- -

Параметри

- -
-
iterable
-
Ітерабельний об'єкт, такий, як {{jsxref("Array")}}, кожен елемент якого є об'єктом Promise.
-
- -

Значення, що повертається

- -

{{jsxref("Promise")}} у стані очікування, який буде асинхронно виконаний, як тільки кожен проміс у вказаному наборі промісів буде завершений, або успішним виконанням, або будучи відхиленим. В цей момент обробнику поверненого проміса передається масив, що містить результат для кожного проміса з початкового набору промісів.

- -

У кожного об'єкта результату присутній рядок status (статус). Якщо статус дорівнює fulfilled (виконаний), тоді присутній параметр value (значення). Якщо статус дорівнює rejected (відхилений), тоді присутній параметр reason (причина). Значення (або причина) відображає значення, з яким кожен проміс був виконаний (або відхилений).

- -

Специфікації

- - - - - - - - - - -
Специфікація
Promise.allSettled() (TC39 Stage 4 Draft)
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Promise.allSettled")}}

- -

Див. також

- - diff --git a/files/uk/web/javascript/reference/global_objects/promise/any/index.html b/files/uk/web/javascript/reference/global_objects/promise/any/index.html deleted file mode 100644 index 3e450db558..0000000000 --- a/files/uk/web/javascript/reference/global_objects/promise/any/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Promise.any() -slug: Web/JavaScript/Reference/Global_Objects/Promise/any -tags: - - JavaScript - - Promise - - Експериментальний - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/any ---- -
{{JSRef}}
- -

Promise.any() приймає ітерабельний об'єкт з об'єктами {{JSxRef("Promise")}} та, як тільки один з промісів виконується, вертає єдиний проміс, який вирішується зі значенням цього проміса. Якщо жодний проміс не виконався (якщо усі надані проміси були відхилені), тоді повернений проміс буде відхилено з об'єктом, який досі є предметом обговорення: або масив причин відхилення, або {{JSxRef("AggregateError")}}, новий підклас {{JSxRef("Error")}}, який поєднує окремі помилки. Найголовніше, цей метод є протилежністю методу {{JSxRef("Promise.all()")}}.

- -
-

Застереження! Метод Promise.any() є експериментальним та не повністю підтримується усіма переглядачами. Він наразі на стадії TC39 Candidate stage (стадія 3).

-
- -

Синтаксис

- -
Promise.any(iterable);
- -

Параметри

- -
-
iterable
-
Ітерабельний об'єкт, такий як {{JSxRef("Array")}}.
-
- -

Значення, що повертається

- - - -

Опис

- -

Цей метод корисний для повернення першого проміса, який виконується. Він завершується після виконання проміса, тому не очікує на завершення інших промісів, як тільки його знаходить. На відміну від {{JSxRef("Promise.all()")}}, який вертає масив вирішених значень, ми отримуємо лише одне вирішене значення (за умови, що принаймні один проміс вирішується). Це може бути вигідно, якщо нам потрібно, щоб лише один проміс було вирішено, і нам байдуже, який саме. Також, на відміну від {{JSxRef("Promise.race()")}}, який вертає перше встановлене значення, цей метод вертає перше вирішене значення. Цей метод ігноруватиме усі відхилені проміси до першого вирішеного проміса.

- -

Виконання

- -

Якщо будь-який з переданих промісів виконається, повернений проміс асинхронно виконується зі значенням виконаного проміса, незалежно від того, чи були інші проміси виконані чи відхилені.

- - - -

Відхилення

- -

Якщо усі передані проміси було відхилено, Promise.any асинхронно відхиляється з одним з двох варіантів (щодо яких ще не дійшли згоди): 

- - - -

Специфікації

- - - - - - - - - - -
Специфікація
ESNext Promise.any Proposal
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Promise.any")}}

- -

Див. також

- - 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 ---- -
{{JSRef}}
- -

Метод catch() вертає {{jsxref("Promise","проміс")}} та має справу лише з відхиленнями. Він поводиться так само, як виклик {{jsxref("Promise.then", "Promise.prototype.then(undefined, onRejected)")}} (насправді, obj.catch(onRejected) здійснює внутрішній виклик obj.then(undefined, onRejected)). Це означає, що ви маєте надати функцію onRejected, навіть якщо хочете отримати повернене значення undefined - наприклад, obj.catch(() => {}).

- -
{{EmbedInteractiveExample("pages/js/promise-catch.html")}}
- - - -

Синтаксис

- -
p.catch(onRejected);
-
-p.catch(function(reason) {
-   // відхилення
-});
-
- -

Параметри

- -
-
onRejected
-
{{jsxref("Function","Функція")}}, що викликається, коли об'єкт Promise відхилено. Ця функція має один аргумент: -
-
reason
-
Причина відхилення.
-
- Проміс, повернений методом catch(), відхиляється, якщо onRejected викидає помилку або повертає проміс, що сам є відхиленим; інакше, він вирішується.
-
- -

Значення, що повертається

- -

Здійснює внутрішній виклик Promise.prototype.then на об'єкті, на якому був викликаний, передаючи параметри undefined та отриманий обробник onRejected. Повертає значення цього виклику, тобто, {{jsxref("Promise")}}.

- -
-

Зауважте, що наведені нижче приклади викидають екземпляри Error. Це вважається гарною практикою у порівнянні з викиданням рядків: Інакше та частина, що здійснює перехоплення, була б змушена робити перевірки, щоб дізнатись, чи є аргумент рядком, чи помилкою, і ви могли б втратити цінну інформацію, таку як траси стеків.

-
- -

Демонстрація внутрішнього виклику:

- -
// заміщуємо початковий 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()]
-
- -

Опис

- -

Метод catch використовується для обробки помилок у композиції промісів. Оскільки він вертає {{jsxref("Promise","проміс")}}, його можна додавати в ланцюги так само, як метод {{jsxref("Promise.then", "then()")}}.

- -

Приклади

- -

Використання та ланцюгування метода catch

- -
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');
-});
-
- -

Підводні камені при викиданні помилок

- -
// Викидання помилок викличе метод 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); // Це ніколи не виконається
-});
- -

Якщо він вирішений

- -
//Створюємо проміс, що не викличе 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);
-});
- -

Специфікації

- - - - - - - - - - - - -
Специфікація
{{SpecName('ESDraft', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Promise.catch")}}

- -

Див. також

- - diff --git a/files/uk/web/javascript/reference/global_objects/promise/finally/index.html b/files/uk/web/javascript/reference/global_objects/promise/finally/index.html deleted file mode 100644 index f67c7fb1e3..0000000000 --- a/files/uk/web/javascript/reference/global_objects/promise/finally/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Promise.prototype.finally() -slug: Web/JavaScript/Reference/Global_Objects/Promise/finally -tags: - - JavaScript - - Promise - - finally - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/finally ---- -
{{JSRef}}
- -

Метод finally() вертає {{jsxref("Promise")}}. Коли проміс встановлено, тобто, або виконано, або відхилено, виконується вказана функція зворотного виклику. Це надає можливість виконати код незалежно від того, чи був проміс успішно виконаний, чи відхилений, як тільки проміс було оброблено.

- -

Це допомагає уникати дублювання коду у обробниках проміса {{jsxref("Promise.then", "then()")}} та {{jsxref("Promise.catch", "catch()")}}.

- -

Синтаксис

- -
p.finally(onFinally);
-
-p.finally(function() {
-   // встановлений (виконаний або відхилений)
-});
-
- -

Параметри

- -
-
onFinally
-
{{jsxref("Function", "Функція")}}, що викликається, коли Promise встановлений.
-
- -

Значення, що повертається

- -

Вертає {{jsxref("Promise","проміс")}}, чиєму обробнику finally присвоєна вказана функція onFinally.

- -

Опис

- -

Метод finally() може бути корисним, якщо ви хочете виконати певну обробку або прибирання, як тільки проміс встановлено, незалежно від результату.

- -

Метод finally() дуже схожий на виклик .then(onFinally, onFinally), але є пара відмінностей:

- - - -
-

Заувага: throw (або повернення відхиленого проміса) у зворотному виклику finally відхилить новий проміс з причиною відхилення, вказаною у виклику throw.

-
- -

Приклади

- -
let isLoading = true;
-
-fetch(myRequest).then(function(response) {
-    var contentType = response.headers.get("content-type");
-    if(contentType && contentType.includes("application/json")) {
-      return response.json();
-    }
-    throw new TypeError("От халепа, немає JSON!");
-  })
-  .then(function(json) { /* обробити JSON далі */ })
-  .catch(function(error) { console.error(error); /* цей рядок може викинути помилку, наприклад, якщо console = {} */ })
-  .finally(function() { isLoading = false; });
-
-
- - - -

Специфікації

- - - - - - - - - - -
Специфікація
{{SpecName('ESDraft', '#sec-promise.prototype.finally', 'Promise.prototype.finally')}}
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Promise.finally")}}

- -

Див. також

- - diff --git a/files/uk/web/javascript/reference/global_objects/promise/index.html b/files/uk/web/javascript/reference/global_objects/promise/index.html deleted file mode 100644 index 1f18c8bd76..0000000000 --- a/files/uk/web/javascript/reference/global_objects/promise/index.html +++ /dev/null @@ -1,232 +0,0 @@ ---- -title: Promise -slug: Web/JavaScript/Reference/Global_Objects/Promise -tags: - - ECMAScript 2015 - - JavaScript - - Promise -translation_of: Web/JavaScript/Reference/Global_Objects/Promise ---- -
{{JSRef}}
- -

Об'єкт Promise відображає остаточне завершення (або неуспіх) асинхронної операції та значення, яке вона повертає.

- -

Щоб дізнатись, як працюють проміси та як їх можна використовувати, радимо вам спочатку прочитати статтю Використання промісів.

- -

Опис

- -

Promise - це проксі для значення, яке може бути невідомим на момент створення проміса. Це дозволяє зв'язувати обробники з кінцевим успішним значенням чи причиною неуспіху асинхронних дій. Таким чином, асинхронні методи повертають значення, як синхронні методи: замість того, щоб негайно повернути кінцеве значення, асинхронний метод повертає проміс, щоб надати значення в певний момент у майбутньому.

- -

Об'єкт Promise може знаходитись в одному з цих станів:

- - - -

Проміс у стані очікування може стати або виконаним (fulfilled) з певним значенням, або відхиленим (rejected) з причиною відхилення (помилкою). Коли щось із цього відбувається, викликаються відповідні обробники, що ставляться в чергу методом об'єкта then. (Якщо проміс вже був виконаний чи відхилений ще до моменту приєднання відповідного обробника, то обробник буде викликаний, таким чином не відбувається "стану гонки" між завершенням асинхронної операції та приєднанням її обробників)

- -

Оскільки методи {{jsxref("Promise.then", "Promise.prototype.then()")}} та {{jsxref("Promise.catch", "Promise.prototype.catch()")}} повертають проміси, їх можна з'єднувати в ланцюжки.

- -

- -
-

Не варто плутати з: Декілька інших мов мають механізми лінивих обчислень та відкладених розрахунків, які також називаються "promises" - наприклад, Scheme. Проміси у JavaScript відображають процеси, які вже відбуваються і які можуть бути з'єднані в ланцюги з функціями зворотного виклику. Якщо вам потрібне ліниве обчислення виразу, розгляньте стрілкові функції без аргументів: f = () => вираз для створення лінивого виразу, та f() для обчислення.

-
- -
-

Заувага: Проміс називають встановленим (settled), якщо він або виконаний, або відхилений, але не знаходиться у стані очікування. Ви також почуєте термін вирішений (resolved) щодо промісів - він означає, що проміс встановлений, або ж "зафіксований", щоб відповідати стану іншого проміса. Стаття States and Fates містить більше подробиць щодо термінології промісів.

-
- -

Конструктор

- -
-
Promise()
-
Конструктор переважно використовується для загортання функцій, які самі не підтримують проміси.
-
- -

Властивості

- -
-
Promise.length
-
Значення довжини, завжди дорівнює 1 (кількість аргументів конструктора).
-
Promise.prototype
-
Прототип для конструктора Promise.
-
- -

Методи

- -
-
{{jsxref("Promise.all", "Promise.all(iterable)")}}
-
Чекає, доки усі проміси не будуть вирішені, або поки будь-який з промісів не буде відхилений.
-
Якщо повернений проміс вирішується, він вирішується із сукупним масивом значень вирішених промісів, у тому ж порядку, в якому вони визначені в ітерабельному об'єкті промісів.
-
В разі відхилення, він відхиляється з причиною з першого відхиленого проміса у ітерабельному об'єкті.
-
{{JSxRef("Promise.allSettled", "Promise.allSettled(iterable)")}}
-
Чекає, доки усі проміси не будуть встановлені (кожен має бути або вирішений, або відхилений).
-
Повертає проміс, який вирішується після того, як усі надані проміси були або вирішені, або відхилені, з масивом об'єктів, які описують результат кожного проміса.
-
{{jsxref("Promise.race", "Promise.race(iterable)")}}
-
Чекає, доки будь-який з промісів не буде або вирішений, або відхилений.
-
Якщо повернений проміс вирішений, він вирішується зі значенням першого проміса з ітерабельного об'єкта, який був вирішений.
-
Якщо він відхилений, він відхиляється з причиною першого відхиленого проміса.
-
- -
-
{{jsxref("Promise.відхилено", "Promise.reject(reason)")}}
-
Повертає новий об'єкт Promise, відхилений з наданою причиною.
-
- -
-
{{jsxref("Promise.resolve", "Promise.resolve(value)")}}
-
Повертає новий об'єкт Promise, який вирішується з наданим значенням. Якщо значенням є промісоподібний об'єкт (такий, що має метод then), то повернений проміс буде його "дотримуватись", приймаючи його кінцевий стан; у іншому випадку повернений проміс буде виконаний з наданим значенням.
-
Загалом, якщо ви не знаєте, є значення промісом чи ні, використайте {{JSxRef("Promise.resolve", "Promise.resolve(value)")}} та працюйте з поверненим значенням як з промісом.
-
- -

Прототип Promise

- -

Властивості

- -
-
Promise.prototype.constructor
-
Вертає функцію, яка створила прототип екземпляра. Це за замовчуванням функція {{jsxref("Promise")}}.
-
- -

Методи

- -
-
{{jsxref("Promise.prototype.catch()")}}
-
Додає до проміса функцію зворотного виклику для обробки відхилення та вертає новий проміс, що вирішується з поверненим значенням цієї функції, коли вона викликається, або з початковим значенням виконання, якщо проміс, навпаки, виконається.
-
{{jsxref("Promise.prototype.then()")}}
-
Додає до проміса обробники виконання та відхилення та вертає новий проміс, що вирішується з поверненим значенням обробника, який викликався, або з початковим встановленим значенням, якщо проміс не оброблявся (тобто, якщо відповідний обробник onFulfilled чи onRejected не є функцією).
-
{{jsxref("Promise.prototype.finally()")}}
-
Додає до проміса обробник та вертає новий проміс, який вирішується, коли вирішується початковий проміс. Обробник викликається, коли проміс встановлений, тобто, або виконаний, або відхилений.
-
- -

Приклади

- -

Базовий приклад

- -
let myFirstPromise = new Promise((resolve, reject) => {
-  // Викликаємо resolve(...), коли те, що ми робили асинхронно, успішно виконалось, і reject(...), якщо неуспішно.
-  // В цьому прикладі ми використовуємо setTimeout(...) для симуляції асинхронного коду.
-  // В житті ви, ймовірно, використовуватиме щось на кшталт XHR або HTML5 API.
-  setTimeout( function() {
-    resolve("Успіх!")  // Є! Все пройшло добре!
-  }, 250)
-})
-
-myFirstPromise.then((successMessage) => {
-  // successMessage - це те, що ми передаємо у наведену вище функцію resolve(...).
-  // Це не обов'язково має бути рядок, але, якщо це повідомлення про успіх, то, мабуть, це буде він.
-  console.log("Є! " + successMessage)
-});
- -

Ускладнений приклад

- - - -

Цей маленький приклад демонструє механізм об'єкта Promise. Метод testPromise() викликається кожний раз, коли натискається кнопка <button>. Він створює проміс, який буде виконаний з використанням window.setTimeout() з лічильником проміса (число, що стартує від 1) кожні 1-3 секунди, у випадковому порядку. Конструктор Promise() використовується для створення проміса.

- -

Виконання проміса логується просто, виконанням зворотного виклику через {{jsxref("Promise.prototype.then()","p1.then()")}}. Кілька логів демонструють, як синхронна частина методу відокремлюється від асинхронного завершення проміса.

- -
'use strict';
-var promiseCount = 0;
-
-function testPromise() {
-    var thisPromiseCount = ++promiseCount;
-
-    var log = document.getElementById('log');
-    log.insertAdjacentHTML('beforeend', thisPromiseCount +
-        ') Запуск (<small>Синхронний код запущено</small>)<br/>');
-
-    // Створюємо новий проміс: ми передаємо лічильник цього проміса, починаючи з 1 (після очікування 3с)
-    var p1 = new Promise(
-        // Функція вирішення викликається з можливістю вирішити або
-        // відхилити проміс
-        function(resolve, reject) {
-            log.insertAdjacentHTML('beforeend', thisPromiseCount +
-                ') Запуск проміса (<small>Асинхронний код запущено</small>)<br/>');
-            // Це лише приклад для створення асинхронності
-            window.setTimeout(
-                function() {
-                    // Ми виконуємо проміс!
-                    resolve(thisPromiseCount);
-                }, Math.random() * 2000 + 1000);
-        }
-    );
-
-    // Визначаємо, що робити, коли проміс вирішено/виконано, викликом then(),
-    // а метод catch() визначає, що робити, якщо проміс відхилено.
-    p1.then(
-        // Залогувати значення виконання
-        function(val) {
-            log.insertAdjacentHTML('beforeend', val +
-                ') Проміс виконано (<small>Асинхронний код завершений</small>)<br/>');
-        })
-    .catch(
-        // Залогувати причину відхилення
-        function(reason) {
-            console.log('Обробити тут відхилений проміс ('+reason+').');
-        });
-
-    log.insertAdjacentHTML('beforeend', thisPromiseCount +
-        ') Проміс створено (<small>Синхронний код завершений</small>)<br/>');
-}
-
- - - -

Цей приклад починається натисканням кнопки. Вам потрібен переглядач, що підтримує об'єкти Promise. Натиснувши кнопку кілька разів за короткий відрізок часу, ви навіть побачите, як різні проміси виконуються один після іншого.

- -

{{EmbedLiveSample("Ускладнений_приклад", "500", "200")}}

- -

Завантаження зображення за допомогою XHR

- -

Інший простий приклад використання об'єктів Promise та XMLHttpRequest - для завантаження зображення - доступний у репозиторії promise-test на MDN GitHub. Ви також можете побачити його в дії. Кожний крок супроводжується коментарями та дозволяє відслідкувати архітектуру Promise та XHR.

- -

Специфікації

- - - - - - - - - - -
Specification
{{SpecName('ESDraft', '#sec-promise-objects', 'Promise')}}
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Promise")}}

- -

Див. також

- - diff --git a/files/uk/web/javascript/reference/global_objects/promise/promise/index.html b/files/uk/web/javascript/reference/global_objects/promise/promise/index.html deleted file mode 100644 index 574121ebba..0000000000 --- a/files/uk/web/javascript/reference/global_objects/promise/promise/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Конструктор Promise() -slug: Web/JavaScript/Reference/Global_Objects/Promise/Promise -tags: - - JavaScript - - Promise - - Конструктор -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/Promise ---- -
{{JSRef}}
- -

Конструктор Promise використовується переважно для того, щоб загортати функції, які не підтримують проміси початково.

- -
{{EmbedInteractiveExample("pages/js/promise-constructor.html", "taller")}}
- - - -

Синтаксис

- -
new Promise(executor);
- -

Параметри

- -
-
executor
-
Функція, яка передається з аргументами resolve та reject. Функція executor (виконавець) виконується негайно, реалізацією проміса, передаючи функції resolve та reject (виконавець викликається ще до того, як конструктор Promise повертає створений об'єкт). Функції resolve та reject, коли вони викликаються, відповідно, вирішують або відхиляють проміс. Виконавець, зазвичай, ініціює якісь асинхронні дії, і, як тільки вони завершуються, викликає або функцію resolve, щоб вирішити проміс, або відхиляє його в разі виникнення помилки. Якщо функція-виконавець викинула помилку, проміс відхиляється. Повернене значення виконавця ігнорується.
-
- -

Приклади

- -

Об'єкт Promise створюється за допомогою ключового слова new та свого конструктора. Цей конструктор приймає своїм аргументом функцію, що називається "функцією-виконавцем". Ця функція має приймати дві функції в якості параметрів. Перша з цих функцій (resolve) викликається, коли асинхронна задача завершується успішно та повертає результат задачі. Друга (reject) викликається, коли задача завершується неуспішно, та повертає причину невдачі, яка, зазвичай, є об'єктом помилки.

- -
const myFirstPromise = new Promise((resolve, reject) => {
-  // зробити щось асинхронне, що зрештою викличе або:
-  //
-  //   resolve(someValue)        // виконаний
-  // або
-  //   reject("причина невдачі")  // відхилений
-});
-
- -

Щоб надати функцію з функціональністю промісу, просто зробіть, щоб вона повертала проміс:

- -
function myAsyncFunction(url) {
-  return new Promise((resolve, reject) => {
-    const xhr = new XMLHttpRequest()
-    xhr.open("GET", url)
-    xhr.onload = () => resolve(xhr.responseText)
-    xhr.onerror = () => reject(xhr.statusText)
-    xhr.send()
-  });
-}
- -

Специфікації

- - - - - - - - - - -
Специфікація
{{SpecName('ESDraft', '#sec-promise-constructor', 'Promise constructor')}}
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Promise.Promise")}}

- -

Див. також

- - diff --git a/files/uk/web/javascript/reference/global_objects/promise/race/index.html b/files/uk/web/javascript/reference/global_objects/promise/race/index.html deleted file mode 100644 index c810db2cc0..0000000000 --- a/files/uk/web/javascript/reference/global_objects/promise/race/index.html +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: Promise.race() -slug: Web/JavaScript/Reference/Global_Objects/Promise/race -tags: - - ECMAScript 2015 - - JavaScript - - Promise - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/race ---- -
{{JSRef}}
- -

Метод Promise.race() повертає проміс, який виконується чи відхиляється, як тільки один з промісів ітерабельного об'єкта буде виконаний чи відхилений, зі значеням або причиною з цього проміса.

- -
{{EmbedInteractiveExample("pages/js/promise-race.html")}}
- - - -

Синтаксис

- -
Promise.race(iterable);
- -

Параметри

- -
-
iterable
-
Ітерабельний об'єкт, наприклад, {{jsxref("Array")}}. Дивіться ітерабельний об'єкт.
-
- -

Значення, що повертається

- -

Об'єкт {{jsxref("Promise")}} у стані очікування, який асинхронно видає значення першого проміса з наданого ітерабельного об'єкта, що виконується або відхиляється.

- -

Опис

- -

Функція race повертає об'єкт Promise, який встановлюється таким самим чином (і отримує таке ж значення), як і перший встановлений проміс ітерабельного об'єкта, переданого як аргумент.

- -

Якщо передано пустий ітерабельний об'єкт, повернений проміс буде вічно перебувати у стані очікування.

- -

Якщо ітерабельний об'єкт містить одне або більше значень, що не є промісами, та/або вже встановлений проміс, тоді Promise.race буде вирішено з першим таким значенням, знайденим в ітерабельному об'єкті.

- -

Приклади

- -

Асинхронність Promise.race

- -

Цей приклад демострує асинхронність функції Promise.race:

- -
// ми передаємо в якості аргументу масив вже вирішених промісів,
-// щоб запустити Promise.race якомога швидше
-var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
-
-var p = Promise.race(resolvedPromisesArray);
-// негайно виводимо значення p
-console.log(p);
-
-// використовуючи setTimeout, ми можемо виконати код, коли стек стане порожнім
-setTimeout(function(){
-    console.log('тепер стек порожній');
-    console.log(p);
-});
-
-// порядок виведення:
-// Promise { <state>: "pending" }
-// тепер стек порожній
-// Promise { <state>: "fulfilled", <value>: 33 }
- -

Пустий ітерабельний об'єкт спричиняє поверення проміса, який вічно знаходитиметься в стані очікування:

- -
var foreverPendingPromise = Promise.race([]);
-console.log(foreverPendingPromise);
-setTimeout(function(){
-    console.log('тепер стек порожній');
-    console.log(foreverPendingPromise);
-});
-
-// порядок виведення:
-// Promise { <state>: "pending" }
-// тепер стек порожній
-// Promise { <state>: "pending" }
-
- -

Якщо ітерабельний об'єкт містить одне або більше значень, що не є промісами, та/або вже встановлені проміси, тоді Promise.race  буде вирішено з першим таким значенням, знайденим у масиві:

- -
var foreverPendingPromise = Promise.race([]);
-var alreadyResolvedProm = Promise.resolve(666);
-
-var arr = [foreverPendingPromise, alreadyResolvedProm, "не проміс"];
-var arr2 = [foreverPendingPromise, "не проміс", Promise.resolve(666)];
-var p = Promise.race(arr);
-var p2 = Promise.race(arr2);
-
-console.log(p);
-console.log(p2);
-setTimeout(function(){
-    console.log('тепер стек порожній');
-    console.log(p);
-    console.log(p2);
-});
-
-// порядок виведення:
-// Promise { <state>: "pending" }
-// Promise { <state>: "pending" }
-// тепер стек порожній
-// Promise { <state>: "fulfilled", <value>: 666 }
-// Promise { <state>: "fulfilled", <value>: "не проміс" }
-
- -

Використання Promise.race – приклади з setTimeout

- -
var p1 = new Promise(function(resolve, reject) {
-    setTimeout(() => resolve('один'), 500);
-});
-var p2 = new Promise(function(resolve, reject) {
-    setTimeout(() => resolve('два'), 100);
-});
-
-Promise.race([p1, p2])
-.then(function(value) {
-  console.log(value); // "два"
-  // Обидва вирішуються, але p2 швидший
-});
-
-var p3 = new Promise(function(resolve, reject) {
-    setTimeout(() => resolve('три'), 100);
-});
-var p4 = new Promise(function(resolve, reject) {
-    setTimeout(() => reject(new Error('чотири')), 500);
-});
-
-Promise.race([p3, p4])
-.then(function(value) {
-  console.log(value); // "три"
-  // p3 швидший, тому він виконується
-}, function(reason) {
-  // Не викликається
-});
-
-var p5 = new Promise(function(resolve, reject) {
-    setTimeout(() => resolve("п'ять"), 500);
-});
-var p6 = new Promise(function(resolve, reject) {
-    setTimeout(() => reject(new Error('шість')), 100);
-});
-
-Promise.race([p5, p6])
-.then(function(value) {
-  // Не викликається
-}, function(reason) {
-  console.log(reason); // "шість"
-  // p6 швидший, тому він відхиляється
-});
- -

Специфікації

- - - - - - - - - - -
Специфікація
{{SpecName('ESDraft', '#sec-promise.race', 'Promise.race')}}
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Promise.race")}}

- -

Див. також

- - diff --git a/files/uk/web/javascript/reference/global_objects/promise/reject/index.html b/files/uk/web/javascript/reference/global_objects/promise/reject/index.html deleted file mode 100644 index 11c3630299..0000000000 --- a/files/uk/web/javascript/reference/global_objects/promise/reject/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Promise.reject() -slug: Web/JavaScript/Reference/Global_Objects/Promise/reject -tags: - - ECMAScript 2015 - - JavaScript - - Promise - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/reject -original_slug: Web/JavaScript/Reference/Global_Objects/Promise/відхилено ---- -
{{JSRef}}
- -

Метод Promise.reject() повертає об'єкт Promise, відхилений з наданою причиною.

- -

{{EmbedInteractiveExample("pages/js/promise-reject.html")}}

- - - -

Синтаксис

- -
Promise.reject(reason);
- -

Параметри

- -
-
reason
-
Причина, чому даний проміс був відхилений.
-
- -

Значення, яке повертається

- -

Об'єкт {{jsxref("Promise")}}, відхилений з наданою причиною.

- -

Опис

- -

Статичний метод Promise.reject повертає відхилений об'єкт Promise. З метою відлагодження, а також вибіркового перехоплення помилок зручно використовувати reason як instanceof {{jsxref("Error")}}.

- -

Приклади

- -

Використання статичного методу Promise.reject()

- -
Promise.reject(new Error('fail')).then(function(error) {
-  // не викликається
-}, function(error) {
-  console.error(error); // стек викликів
-});
- -

Специфікації

- - - - - - - - - - -
Специфікація
{{SpecName('ESDraft', '#sec-promise.reject', 'Promise.reject')}}
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Promise.reject")}}

- -

Дивіться також

- - diff --git a/files/uk/web/javascript/reference/global_objects/promise/resolve/index.html b/files/uk/web/javascript/reference/global_objects/promise/resolve/index.html deleted file mode 100644 index 88aeba5465..0000000000 --- a/files/uk/web/javascript/reference/global_objects/promise/resolve/index.html +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: Promise.resolve() -slug: Web/JavaScript/Reference/Global_Objects/Promise/resolve -tags: - - ECMAScript 2015 - - JavaScript - - Method - - Promise - - Проміс - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/resolve ---- -
{{JSRef}}
- -

Метод Promise.resolve() повертає об'єкт {{jsxref("Promise")}}, вирішений з наданим значенням. Якщо значенням є проміс, то цей проміс буде повернено; якщо значенням є промісоподібний об'єкт (thenable) (такий, що має {{jsxref("Promise.then", "метод \"then\"")}}), то повернений проміс буде його "дотримуватись", приймаючи його кінцевий стан; у іншому випадку повернений проміс буде виконаний з наданим значенням. Функція вирівнює вкладені шари промісоподібних об'єктів (наприклад, проміс, що вирішується з промісом, який вирішується з чимось ще) у єдиний шар.

- -

Синтаксис

- -
Promise.resolve(value);
-
- -

Параметри

- -
-
value
-
Аргумент, з яким буде вирішений даний Promise. Також він може бути промісом або промісоподібним об'єктом.
-
- -

Значення, яке повертається

- -

Об'єкт {{jsxref("Promise")}}, вирішений з наданим значенням, або проміс, переданий в якості значення, якщо значення було промісом.

- -

Опис

- -

Статична функція Promise.resolve повертає вирішений об'єкт Promise.

- -

Приклади

- -

Використання статичного методу Promise.resolve

- -
Promise.resolve('Success').then(function(value) {
-  console.log(value); // "Успіх"
-}, function(value) {
-  // не викликається
-});
-
- -

Вирішення проміса масивом

- -
var p = Promise.resolve([1,2,3]);
-p.then(function(v) {
-  console.log(v[0]); // 1
-});
-
- -

Вирішення проміса іншим промісом

- -
var original = Promise.resolve(33);
-var cast = Promise.resolve(original);
-cast.then(function(value) {
-  console.log('значення: ' + value);
-});
-console.log('original === cast ? ' + (original === cast));
-
-// порядок виведення:
-// original === cast ? true
-// значення: 33
- -

Перевернутий порядок логів спричинений тим фактом, що обробники then викликаються асинхронно. Дивіться, як працює then тут.

- -

Вирішення промісоподібних об'єктів та викидання помилок

- -
// Вирішення промісоподібного об'єкта
-var p1 = Promise.resolve({
-  then: function(onFulfill, onReject) { onFulfill('виконаний!'); }
-});
-console.log(p1 instanceof Promise) // true, об'єкт передано у проміс
-
-p1.then(function(v) {
-    console.log(v); // "виконаний!"
-  }, function(e) {
-    // не викликається
-});
-
-// Промісоподібний об'єкт викидає помилку перед зворотнім викликом
-// Проміс відхиляється
-var thenable = { then: function(resolve) {
-  throw new TypeError('Помилка');
-  resolve('Вирішення');
-}};
-
-var p2 = Promise.resolve(thenable);
-p2.then(function(v) {
-  // не викликається
-}, function(e) {
-  console.log(e); // TypeError: Помилка
-});
-
-// Промісоподібний об'єкт викидає помилку після зворотного виклику
-// Проміс вирішується
-var thenable = { then: function(resolve) {
-  resolve('Вирішення');
-  throw new TypeError('Помилка');
-}};
-
-var p3 = Promise.resolve(thenable);
-p3.then(function(v) {
-  console.log(v); // "Вирішення"
-}, function(e) {
-  // не викликається
-});
-
- -

Специфікації

- - - - - - - - - - -
Специфікація
{{SpecName('ESDraft', '#sec-promise.resolve', 'Promise.resolve')}}
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Promise.resolve")}}

- -

Дивіться також

- - diff --git a/files/uk/web/javascript/reference/global_objects/promise/then/index.html b/files/uk/web/javascript/reference/global_objects/promise/then/index.html deleted file mode 100644 index 8cbcc884fc..0000000000 --- a/files/uk/web/javascript/reference/global_objects/promise/then/index.html +++ /dev/null @@ -1,297 +0,0 @@ ---- -title: Promise.prototype.then() -slug: Web/JavaScript/Reference/Global_Objects/Promise/then -tags: - - ECMAScript 2015 - - JavaScript - - Promise - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/then ---- -
{{JSRef}}
- -

Метод then() вертає об'єкт {{jsxref("Promise")}}. Він приймає два аргументи: функції зворотного виклику для випадків успішного та неуспішного проміса.

- -
{{EmbedInteractiveExample("pages/js/promise-then.html")}}
- - - -
-

Якщо один чи обидва аргументи пропущені, або надані не функції, тоді then не матиме обробників, але не згенерує помилок. Якщо Promise, на якому викликається then, приймає стан (виконання або відхилення), для якого then не має обробника, новий Promise створюється без додаткових обробників, просто приймаючи кінцевий стан оригінального проміса, на якому було викликано then.

-
- -

Синтаксис

- -
p.then(onFulfilled[, onRejected]);
-
-p.then(value => {
-  // виконання
-}, reason => {
-  // відхилення
-});
-
- -

Параметри

- -
-
onFulfilled {{optional_inline}}
-
{{jsxref("Function","Функція")}}, що викликається, якщо Promise виконано. Ця функція має один аргумент, значення виконання. Якщо це не функція, вона внутрішньо замінюється на функцію "Identity" (вона повертає отриманий аргумент).
-
onRejected {{optional_inline}}
-
{{jsxref("Function","Функція")}}, що викликається, якщо Promise відхилено. Ця функція має один аргумент, причина відхилення. Якщо це не функція, вона внутрішньо замінюється на функцію "Thrower" (вона викидає помилку, яку отримала в якості аргумента).
-
- -

Значення, що повертається

- -

Як тільки {{jsxref("Promise","проміс")}} був виконаний або відхилений, відповідна функція-обробник (onFulfilled або onRejected) буде викликана асинхронно (запланована у активному циклі потоку). Поведінка функції-обробника відповідає спеціальному набору правил. Якщо функція-обробник:

- - - -

Наступний приклад демонструє асинхронність методу then.

- -
// при використанні вирішеного проміса блок 'then' буде негайно запущений,
-// але його обробники запустяться асинхронно, як демонструє console.log
-const resolvedProm = Promise.resolve(33);
-
-let thenProm = resolvedProm.then(value => {
-    console.log("Це запускається після завершення головного стеку. Отримане й повернене значення: " + value);
-    return value;
-});
-// негайне логування значення thenProm
-console.log(thenProm);
-
-// використовуючи setTimeout, ми можемо відкласти виконання функції, поки стек не стане порожнім
-setTimeout(() => {
-    console.log(thenProm);
-});
-
-
-// порядок логування:
-// Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
-// "Це запускається після завершення головного стеку. Отримане й повернене значення: 33"
-// Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: 33}
- -

Опис

- -

Оскільки методи then та {{jsxref("Promise.prototype.catch()")}} вертають проміси, їх можна поєднувати в ланцюги — ця операція зветься композицією.

- -

Приклади

- -

Використання метода then

- -
var p1 = new Promise((resolve, reject) => {
-  resolve('Успіх!');
-  // або
-  // reject(new Error("Помилка!"));
-});
-
-p1.then(value => {
-  console.log(value); // Успіх!
-}, reason => {
-  console.error(reason); // Помилка!
-});
-
- -

Ланцюгування

- -

Метод then вертає об'єкт Promise, що дозволяє використовувати ланцюгування.

- -

Якщо функція, передана у then в якості обробника, вертає об'єкт Promise, аналогічний об'єкт Promise буде переданий у наступний then ланцюга методів. Наведений нижче фрагмент імітує асинхронний код функцією setTimeout

- -
Promise.resolve('ква')
-  // 1. Отримати "ква", приєднати "драт" та вирішити це для наступного then
-  .then(function(string) {
-    return new Promise(function(resolve, reject) {
-      setTimeout(function() {
-        string += 'драт';
-        resolve(string);
-      }, 1);
-    });
-  })
-  // 2. отримати "квадрат", призначити функцію зворотного виклику для обробки цього рядка
-  // та вивести його на консоль, але не раніше повернення необробленого рядка
-  // string у наступний then
-  .then(function(string) {
-    setTimeout(function() {
-      string += 'ура';
-      console.log(string);
-    }, 1)
-    return string;
-  })
-  // 3. вивести допоміжні повідомлення щодо того, як виконується код в цьому розділі,
-  // раніше, ніж рядок string буде оброблений імітованим асинхронним кодом у
-  // попередньому блоці then.
-  .then(function(string) {
-    console.log("Останній Then:  йой... ми не створили та не повернули екземпляр проміса " +
-                "у попередньому then, тому послідовність може бути трохи " +
-                "несподіваною");
-
-    // Зауважте, що `string` не матиме частини 'ура' в цій точці. Це тому,
-    // що ми імітували його асинхронне виконання за допомогою функції setTimeout
-    console.log(string);
-  });
-
-// порядок виведення:
-// Останній Then: йой... ми не створили та не повернули екземпляр проміса у попередньому then, тому послідовність може бути трохи несподіваною
-// квадрат
-// квадратура
- -

Коли значення просто повертається з обробника then, він поверне Promise.resolve(<значення, повернене обробником, що викликався>).

- -
var p2 = new Promise(function(resolve, reject) {
-  resolve(1);
-});
-
-p2.then(function(value) {
-  console.log(value); // 1
-  return value + 1;
-}).then(function(value) {
-  console.log(value + ' - Синхронне значення працює');
-});
-
-p2.then(function(value) {
-  console.log(value); // 1
-});
-
- -

Виклик then поверне відхилений проміс, якщо функція викидає помилку або повертає відхилений проміс.

- -
Promise.resolve()
-  .then(() => {
-    // Змушує .then() повернути відхилений проміс
-    throw new Error('О, ні!');
-  })
-  .then(() => {
-    console.log('Не викликається.');
-  }, error => {
-    console.error('Викликано функцію onRejected: ' + error.message);
-  });
- -

У всіх інших випадках повертається вирішений об'єкт Promise. У наступному прикладі перший then() поверне значення 42, загорнуте у вирішений проміс, незважаючи на те, що попередній проміс ланцюжка був відхилений.

- -
Promise.reject()
-  .then(() => 99, () => 42) // onRejected вертає 42, обгорнуте у вирішений Promise
-  .then(solution => console.log('Вирішений зі значенням ' + solution)); // Вирішений зі значенням 42
- -

На практиці часто бажано перехоплювати відхилені проміси, як продемонстровано нижче, а не використовувати синтаксис then для двох випадків.

- -
Promise.resolve()
-  .then(() => {
-    // Змушує .then() повернути відхилений проміс
-    throw new Error('О, ні!');
-  })
-  .catch(error => {
-    console.error('Викликано функцію onRejected: ' + error.message);
-  })
-  .then(() => {
-    console.log("Мене завжди викликають, навіть якщо проміс попереднього then відхилено");
-  });
- -

Ви також можете використати ланцюгування, щоб реалізувати функцію з API на промісах, на основі іншої такої функції.

- -
function fetch_current_data() {
-  // API fetch() вертає проміс. Ця функція
-  // створює схожий API, крім того, що над значенням
-  // виконанного проміса цієї функції виконується
-  // більше дій.
-  return fetch('current-data.json').then(response => {
-    if (response.headers.get('content-type') != 'application/json') {
-      throw new TypeError();
-    }
-    var j = response.json();
-    // можливо, зробити щось із j
-    return j; // значення виконання, що надається користувачу
-              // fetch_current_data().then()
-  });
-}
-
- -

Якщо onFulfilled вертає проміс, повернене значення then буде вирішене чи відхилене промісом.

- -
function resolveLater(resolve, reject) {
-  setTimeout(function() {
-    resolve(10);
-  }, 1000);
-}
-function rejectLater(resolve, reject) {
-  setTimeout(function() {
-    reject(new Error('Помилка'));
-  }, 1000);
-}
-
-var p1 = Promise.resolve('ква');
-var p2 = p1.then(function() {
-  // Повернути тут проміс, який буде вирішений зі значенням 10 через 1 секунду
-  return new Promise(resolveLater);
-});
-p2.then(function(v) {
-  console.log('вирішений', v);  // "вирішений", 10
-}, function(e) {
-  // не викликається
-  console.error('відхилений', e);
-});
-
-var p3 = p1.then(function() {
-  // Повернути тут проміс, що відхилятиметься з помилкою 'Помилка' через 1 секунду
-  return new Promise(rejectLater);
-});
-p3.then(function(v) {
-  // не викликається
-  console.log('вирішений', v);
-}, function(e) {
-  console.error('відхилений', e); // "відхилений", 'Помилка'
-});
-
- -

Поліфіл у стилі window.setImmediate на основі промісів

- -

Використання методу {{jsxref("Function.prototype.bind()")}} Reflect.apply ({{jsxref("Reflect.apply()")}}) для створення функції (що не скасовується) у стилі setImmediate.

- -
const nextTick = (() => {
-  const noop = () => {}; // буквально
-  const nextTickPromise = () => Promise.resolve().then(noop);
-
-  const rfab = Reflect.apply.bind; // (thisArg, fn, thisArg, [...args])
-  const nextTick = (fn, ...args) => (
-    fn !== undefined
-    ? Promise.resolve(args).then(rfab(null, fn, null))
-    : nextTickPromise(),
-    undefined
-  );
-  nextTick.ntp = nextTickPromise;
-
-  return nextTick;
-})();
-
- -

Специфікації

- - - - - - - - - - -
Специфікація
{{SpecName('ESDraft', '#sec-promise.prototype.then', 'Promise.prototype.then')}}
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Promise.then")}}

- -

Див. також

- - -- cgit v1.2.3-54-g00ecf