【Node.js24.x】Promise::finally()メソッドの使い方
finallyメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
finallyメソッドはPromiseクラスに属し、非同期処理の最終的な後処理を実行するメソッドです。Promiseが成功(解決)した場合でも、失敗(拒否)した場合でも、どちらの結果になっても必ず実行したい処理を登録するために使用します。
このメソッドは、引数としてコールバック関数を受け取ります。このコールバック関数は、Promiseの結果(解決値や拒否理由)に関わらず実行されるため、引数を取りません。例えば、データの読み込み中に表示していたローディングアイコンを消したり、リソースを解放したりするなど、処理の成否にかかわらず実行すべきクリーンアップ処理に適しています。
finallyメソッド自身は、常にPromiseを返します。finallyに登録されたコールバック関数が完了した後、その後に続くPromiseチェーンには、finallyが実行される前のPromiseの解決値または拒否理由がそのまま引き継がれます。これにより、処理の途中で状態を変化させることなく、最終的な処理を実行できます。ただし、finallyのコールバック関数内でPromiseが返された場合は、そのPromiseが解決するまで次の処理は待機し、コールバック関数がエラーをスローした場合はそのエラーが次のチェーンに伝播します。
構文(syntax)
1new Promise((resolve, reject) => { 2 // 非同期処理をシミュレート 3 const success = Math.random() > 0.5; 4 setTimeout(() => { 5 if (success) { 6 resolve("データが正常に取得されました"); 7 } else { 8 reject(new Error("データの取得に失敗しました")); 9 } 10 }, 1000); 11}) 12.then(result => { 13 console.log("成功時の処理:", result); 14}) 15.catch(error => { 16 console.error("失敗時の処理:", error.message); 17}) 18.finally(() => { 19 // Promiseが成功(resolve)または失敗(reject)のどちらで完了しても、必ず実行される処理 20 // ここでリソースの解放や、ステータスのクリアなどのクリーンアップ処理を記述します。 21 console.log("Promise処理が完了しました(成功・失敗にかかわらず)"); 22});
引数(parameters)
onFinally
- onFinally: Promiseが成功しても失敗しても、最終的に実行されるコールバック関数。この関数は引数を受け取りません。
戻り値(return)
Promise
Promise.prototype.finally() は、Promise の処理が成功しても失敗しても、最終的に実行したい処理を登録するためのメソッドです。このメソッドは、常に新しい Promise を返します。この新しい Promise は、finally ブロックで登録されたコールバック関数が実行された後に解決されます。