--- 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 ---
Метод finally() вертає {{jsxref("Promise")}}. Коли проміс встановлено, тобто, або виконано, або відхилено, виконується вказана функція зворотного виклику. Це надає можливість виконати код незалежно від того, чи був проміс успішно виконаний, чи відхилений, як тільки проміс було оброблено.
Це допомагає уникати дублювання коду у обробниках проміса {{jsxref("Promise.then", "then()")}} та {{jsxref("Promise.catch", "catch()")}}.
p.finally(onFinally);
p.finally(function() {
// встановлений (виконаний або відхилений)
});
onFinallyPromise встановлений.Вертає {{jsxref("Promise","проміс")}}, чиєму обробнику finally присвоєна вказана функція onFinally.
Метод finally() може бути корисним, якщо ви хочете виконати певну обробку або прибирання, як тільки проміс встановлено, незалежно від результату.
Метод finally() дуже схожий на виклик .then(onFinally, onFinally), але є пара відмінностей:
finally не отримує жодних аргументів, оскільки не існує надійних методів визначити, чи був проміс виконаний, чи відхилений. Цей випадок використання розрахований саме на те, що вам неважлива причина відхилення чи повернене значення, і тому немає необхідності їх надавати. Отже, для прикладу:
Promise.resolve(2).then(() => {}, () => {}) (який буде вирішений з undefined), Promise.resolve(2).finally(() => {}) буде вирішений з 2.Promise.reject(3).then(() => {}, () => {}) (який буде виконаний з undefined), Promise.reject(3).finally(() => {}) буде відхилений з 3.Заувага: 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; });
Будь ласка, не додавайте поліфіли у статті MDN. Більше інформації дивіться за посиланням: https://discourse.mozilla.org/t/mdn-rfc-001-mdn-wiki-pages-shouldnt-be-a-distributor-of-polyfills/24500
| Специфікація |
|---|
| {{SpecName('ESDraft', '#sec-promise.prototype.finally', 'Promise.prototype.finally')}} |
To contribute to this compatibility data, please write a pull request against this repository: https://github.com/mdn/browser-compat-data.
{{Compat("javascript.builtins.Promise.finally")}}