Ответ 1
По состоянию на 7 февраля 2018 г.
Chrome 63+, Firefox 58+ и Opera 50+ поддерживают Promise.finally
.
В Node.js 8.1. 4+ (V8 5. 8+) эта функция доступна за флагом --harmony-promise-finally
.
Предложение Promise.prototype.finally ECMAScript в настоящее время находится на стадии 3 процесса TC39.
В то же время иметь обещание функциональности во всех браузерах; Вы можете добавить дополнительный then()
после catch()
чтобы всегда вызывать этот обратный вызов.
Пример:
myES6Promise.then(() => console.log('Resolved'))
.catch(() => console.log('Failed'))
.then(() => console.log('Always run this'));
Демонстрация JSFiddle: https://jsfiddle.net/9frfjcsg/
Или вы можете расширить прототип, чтобы включить метод finally()
(не рекомендуется):
Promise.prototype.finally = function(cb) {
const res = () => this;
const fin = () => Promise.resolve(cb()).then(res);
return this.then(fin, fin);
};
Демонстрация JSFiddle: https://jsfiddle.net/c67a6ss0/1/
Там также библиотека Promise.prototype.finally.