
JavaScriptを学習し始めたばかりで、プロミス(「プロミス」、「約束された結果」、「プロミスオブジェクト」と呼ばれることもある)にあまり詳しくない場合は、このトピックに関する以前の出版物に興味があるかもしれません。
→ ES6の約束:パターンとアンチパターン
→ JavaScript:非同期プログラミングメソッド
→ JavaScript ES8およびasync / awaitへの移行
→ 非同期/待機:約束を忘れる6つの理由
→ 地獄からの脱出async / await
→ JavaScript ES6:書く量を減らして、もっとする
→ 約束を理解したい人のための約束ガイド
→ JavaScript async / await design:長所、落とし穴、使用パターン
→ JavaScriptでPromiseを使用する
Promise.prototype.finallyメソッド
ECMAScript 2018標準の条項25.6.5.3はPromise.prototype.finallyメソッド専用であり、 caniuse.comによると、このメソッドのサポートレベルは約81%です。 このメソッドはNode.jsでも使用できます。
finally
promiseメソッドは、標準の最も重要な革新の1つです。これにより、promiseの結果に関係なく実行される関数を指定できます。 そのような機能は、約束が正常に解決され、拒否された場合に満たされます。
例を考えてみましょう:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); });
これは、2000ミリ秒後に解決する完全に一般的な約束です。 その後、何らかのアクションを実行する必要がある場合、
then
ブロックが必要に
then
ます。
myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } );
2つの匿名関数が
then
メソッドに渡されます。 約束が正常に解決された場合、最初のものが実行されます。 2番目は拒否されたときです。 私たちの約束は常に正常に完了し、
success!!!
メッセージは常にコンソールに表示されます
success!!!
。 これはすべて非常に良いことですが、約束の拒否後、およびその作業が正常に完了した後に特定のアクションを実行する必要がある場合はどうでしょうか? ここで、
finally
メソッドが役立ちます。
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); }); myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } ).finally(finallyMessage => { console.log('FINALLY!!')});
約束がどのように作業を完了するかに関係なく、対応するメッセージに加えて、テキスト
FINALLY!!
、これは、
finally
メソッドに渡されたコールバック関数がとにかく機能することを示しています。 これを確認するために、 実験することができます。
まとめ
ES2018にPromise.prototype.finallyメソッドが登場したという事実は、近い将来、非常に高いレベルのブラウザーサポートが期待できることを示唆しています。 つまり、以前はサードパーティの開発者が作成した補助ツールを使用する必要がありましたが、標準ツールを使用して実装できるようになりました。
どのような状況で
Promise.prototype.finally
メソッドが
Promise.prototype.finally
ですか? たとえば、何かをダウンロードするために使用されたプロミスの開始時に、アニメーションの再生が開始された場合、
finally
このアニメーションを完了することができます。
finally
ブロックでは、たとえば、特定のモーダルウィンドウを閉じることができます。 実際、
finally
メソッドが役立つ状況は数多くあります。
親愛なる読者! 標準実装の前に、finally promisesメソッドの代替を使用しましたか?
