Bluebirdは、あなたのプロミスチェーンで何が起こっても呼び出される finally
メソッドを提供しています。 (リソースのロック解除、ローダーの非表示など)クリーニングの目的には非常に便利です。
ES6ネイティブの約束に同等のものはありますか?
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ライブラリもあります。