こんにちは。
本日はPromise入門の続きです。
前回までの記事
【Node】Promiseの入門 - なんだかGoodVibes
【Node】Promise入門(all,allSettled,race) - なんだかGoodVibes
finally
finallyはPromiseが確立した際に必ず呼ばれます。
つまり、finallyに記載した処理は
結果がresolveでもrejectでも実行することができるのです。
早速、サンプルを書いてみましょう。
resolveの場合
function p1() { return new Promise((resolve, reject) => { setTimeout(() => { resolve('p1 OK'); }, 1000); }); } function p2(t) { console.log(`[p2]: ${t}`); return new Promise((resolve, reject) => { setTimeout(() => { resolve('p2 OK'); }, 1000); }); } p1() .then(value => p2(value)) .catch(err => console.log(`[Err]: ${err}`)) .finally(() => console.log('END!'));
結果は以下のようになります。
「END!」が出力されました。
[p2]: p1 OK END!
rejectの場合
function p1() { return new Promise((resolve, reject) => { setTimeout(() => { resolve('p1 OK'); }, 1000); }); } function p2(t) { console.log(`[p2]: ${t}`); return new Promise((resolve, reject) => { setTimeout(() => { resolve('p2 OK'); }, 1000); }); } function p3(t) { console.log(`[p3]: ${t}`); return new Promise((resolve, reject) => { setTimeout(() => { reject('p3 NG'); }, 1000); }); } p1() .then(value => p2(value)) .then(value => p3(value)) .catch(err => console.log(`[Err]: ${err}`)) .finally(() => console.log('END!'));
結果は以下のようになります。
こちらも「END!」が出力されました。
[p2]: p1 OK [p3]: p2 OK [Err]: p3 NG END!
以上です。