web-dev-qa-db-ja.com

ネイティブのES6の約束において、Bluebird Promise.finallyと同等のものは何ですか?

Bluebirdは、あなたのプロミスチェーンで何が起こっても呼び出される finally メソッドを提供しています。 (リソースのロック解除、ローダーの非表示など)クリーニングの目的には非常に便利です。

ES6ネイティブの約束に同等のものはありますか?

156
Aric Lasry

2018年2月7日現在

Chrome 63以降、Firefox 58以降、およびOpera 50以降のサポート Promise.finally

Node.js 8.1.4以降(V8 5.8以降)では、この機能はフラグ --harmony-promise-finally の後ろで利用可能です。

Promise.prototype.finally ECMAScript Proposal は現在TC39プロセスの stage にあります。

当面の間は、promise.finallyすべてのブラウザで機能します。 常に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 shimライブラリもあります。

271
Miguel Mota