JS.next

JavaScriptの最新実装情報を追うブログ

Promise.prototype.finallyが実装された

概要

プロミスの成功・失敗に関わらず継続して処理を行うためのPromise.prototype.finallyメソッドが実装された


参考記事

Promiseについて - JS.next


イメージ

従来、処理が成功しても失敗しても最後に行いたい処理を記述するためには、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