この記事では、非同期処理を扱うのに便利な関数を紹介します!
もちた
僕は、開発でTypescriptでコードを書いているのですが、非同期処理を扱うのは日常茶飯事です!なので、僕が使っているPromise.all系の関数について紹介します!
目次
Promise.all
Promise.all
は、複数のPromiseを並行して実行し、すべてのPromiseが成功した場合にのみ結果を返す関数です。これは、複数のリソースを同時に取得する必要がある時、複数の非同期処理を同時に実行し、パフォーマンスを向上させたい時などに非常に便利です。TypeScriptでは、各Promiseの戻り値の型を配列で管理することで、型安全性を保ちながら利用できます。
async function fetchMultipleData() {
const [data1, data2, data3] = await Promise.all([
fetchData1(),
fetchData2(),
fetchData3()
]);
console.log(data1, data2, data3);
}
Promise.race
Promise.race
は、複数のPromiseの中で最初に完了したものの結果を返します。これは、複数のリソースからの応答を待っているが、最速のものだけを利用したい場合に有用です。
async function fetchDataQuickly() {
const fastestData = await Promise.race([
fetchData1(),
fetchData2(),
fetchData3()
]);
console.log(fastestData);
}
Promise.allSettled
Promise.allSettled
は、すべてのPromiseが完了するまで待ち、それぞれのPromiseが成功したか失敗したかにかかわらず、その結果の配列を返します。これにより、複数の非同期処理の完了を確認しつつ、個々の成功・失敗をstatus
を使って確認でき、処理を分岐させれます。
async function fetchAllData() {
const results = await Promise.allSettled([
fetchData1(),
fetchData2(),
fetchData3()
]);
results.forEach((result) => {
if (result.status === 'fulfilled') {
console.log('Success:', result.value);
} else {
console.error('Failure:', result.reason);
}
});
}
Promise.any
Promise.any
は、複数のPromiseのうち、最初に成功したものの結果を返します。これはPromise.race
に似ていますが、Promise.any
は失敗したPromiseを無視し、最初の成功結果のみを返します。これは、複数のリソースからのデータの中で、最初に得られた有効なデータを使用したい場合に適しています。
async function fetchAnyData() {
const firstSuccessfulData = await Promise.any([
fetchData1(),
fetchData2(),
fetchData3()
]);
console.log(firstSuccessfulData);
}