なんだかGoodVibes

日々の勉強メモです。

【Node】Promise入門(finally)

こんにちは。
本日は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!



以上です。