【JavaScript】Promiseについて

【JavaScript】Promiseについて

以下のリンクを使って、各セクションにジャンプできます。

Promise.all()について

Promise.all() は、複数のPromiseを並行して実行し、すべてが成功した時に結果をまとめて返すメソッドです。すべてのPromiseが解決(fulfilled)された場合、返されたPromiseはその解決値を配列として返します。

ただし、1つでも失敗(rejected)した場合、その時点で全体が失敗として扱われ、最初に失敗したPromiseのエラーが返されます。つまり、すべてのPromiseが成功することが条件です。


const promise1 = new Promise((resolve, reject) => setTimeout(resolve, 1000, 'Success'));
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 2000, 'Success'));
const promise3 = new Promise((resolve, reject) => setTimeout(resolve, 3000, 'Success'));

Promise.all([promise1, promise2, promise3]).then((results) => {
    console.log(results); // ['Success', 'Success', 'Success']
}).catch((error) => {
    console.log(error);
});
    

上記の例では、3つのPromiseがすべて成功したため、結果として「[‘Success’, ‘Success’, ‘Success’]」が出力されます。もし、どれかが失敗した場合、そのエラーがキャッチされます。

Promise.race()について

Promise.race() は、複数のPromiseのうち、最初に解決または拒否されたPromiseの結果を返します。最初に完了したPromiseだけが扱われ、その後に他のPromiseが解決しても無視されます。

このメソッドは、どのPromiseが最初に結果を返すかを重視する場合に便利です。


const promise1 = new Promise((resolve, reject) => setTimeout(resolve, 1000, 'First'));
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 500, 'Second'));

Promise.race([promise1, promise2]).then((result) => {
    console.log(result); // 'Second'
});
    

上記の例では、promise2 が500msで最初に解決され、その結果「’Second’」が出力されます。

Promise.any()について

Promise.any() は、複数のPromiseのうち、最初に解決したPromiseの結果を返します。もし、すべてのPromiseが拒否された場合は、エラーを返します。つまり、最初に成功したPromiseを待ち、その結果を使用しますが、すべてが失敗した場合はエラーが発生します。


const promise1 = new Promise((resolve, reject) => setTimeout(reject, 1000, 'Error 1'));
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 500, 'Success'));

Promise.any([promise1, promise2]).then((result) => {
    console.log(result); // 'Success'
}).catch((error) => {
    console.log(error);
});
    

上記の例では、promise2 が500msで最初に成功し、その結果「’Success’」が出力されます。

Promise.allSettled()について

Promise.allSettled() は、すべてのPromiseが解決または拒否されるのを待ってから、その結果を返します。成功した場合は解決値、失敗した場合はエラーを返すため、すべてのPromiseの結果を把握したい場合に便利です。

すべてのPromiseの最終的な結果がわかるため、Promise.all() のようにエラーが発生して処理が止まることがありません。


const promise1 = new Promise((resolve, reject) => setTimeout(resolve, 1000, 'Success'));
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 500, 'Error'));

Promise.allSettled([promise1, promise2]).then((results) => {
    console.log(results);
    // [
    //   { status: 'fulfilled', value: 'Success' },
    //   { status: 'rejected', reason: 'Error' }
    // ]
});
    

上記の例では、2つのPromiseが処理され、1つは成功、もう1つは失敗した結果が出力されます。それぞれの結果はオブジェクトとして提供され、「status」プロパティに成功なら「fulfilled」、失敗なら「rejected」が設定されます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です