Что эквивалентно Bluebird Promise.finally в обещаниях ES6?

Bluebird предлагает метод finally который вызывается независимо от того, что происходит в вашей цепочке обещаний. Я нахожу это очень удобным для очистки (например, разблокировка ресурса, скрытие загрузчика,...)

Есть ли аналог в обещаниях ES6?

Ответ 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.