概要
プロミスの成功・失敗に関わらず継続して処理を行うためのPromise.prototype.finallyメソッドが実装された
参考記事
イメージ
従来、処理が成功しても失敗しても最後に行いたい処理を記述するためには、then
メソッドの2つの引数両方に指定するなどするしかなかった。
showMessage( '読込中……' ) fetchData( 'hoge' ) .then( data => showData( data ) ) .catch( ( ) => showData( null ) ) .then( ( ) => showMessage( '読込完了!' ), ( ) => showMessage( '読込完了!' ) )
それがfinally
メソッドを使うとこう書ける。
showMessage( '読込中……' ) fetchData( 'hoge' ) .then( data => showData( data ) ) .catch( ( ) => showData( null ) ) .finally( ( ) => showMessage( '読込完了!' ) )
またthen
と違うところは、.then( )
で新しく返されるプロミスはコールバック内で値を返すとその値で解決されるが、
finally
の場合は、呼び出し元のプロミスの状態をそのまま引き継ぎ、コールバック内で値を返しても影響を与えないという点である。
Promise.resolve( 42 ) .then( n => 123 ) /// 123の解決値を持ったプロミス .finally( n => n + 1 ) .finally( n => n + 1 ) .finally( n => console.log( n ) ) //// 123
実装されるバージョン
V8 5.8.245