なんだかGoodVibes

日々の勉強メモです。

【Node】Promise入門(all,allSettled,race)

こんにちは。
本日はPromise入門の続きです。

nandakagoodvibes.hatenablog.com


Promise.all

引数のPromiseが解決するまで、待機します。

const p1 = Promise.resolve('p1');

const p2 = Promise.resolve('p2');

const p3 = new Promise((resolve, reject) => {
    setTimeout(resolve, 3000, 'p3');
});

Promise.all([p1,p2,p3]).then((value) => {
    console.log(value);
});

結果は以下です。

[ 'p1', 'p2', 'p3' ]


Promise.allSettled

与えられたPromiseのすべての結果を返します。

const p1 = Promise.resolve('p1');
const p2 = Promise.reject('p2');
const p3 = Promise.resolve('p3');

const promises = [p1, p2, p3];

Promise.allSettled(promises)
       .then((result) => {
           result.forEach((result) => {
               console.log(result.status);
           });
       });

結果は以下です。

fulfilled
rejected
fulfilled


Promise.race

与えられたPromiseが1つでも成功もしくは失敗したら
即座にPromiseを返します。

const p1 = new Promise((resolve, reject) => {
    setTimeout(resolve, 1000, 'p1');
});

const p2 = new Promise((resolve, reject) => {
    setTimeout(resolve, 2000, 'p2');
});

Promise.race([p1, p2]).then(value => {
    console.log(value);
});

結果は以下です。

p1


もう一つ例を。

const p3 = new Promise((resolve, reject) => {
    setTimeout(reject, 1000, 'p3');
});

const p4 = new Promise((resolve, reject) => {
    setTimeout(resolve, 2000, 'p4');
});

Promise.race([p3, p4])
    .then(value => {
        console.log(value);
    })
    .catch(value => {
        console.log(`reject:${value}`);
    });

結果は以下です。

reject:p3



以上です。