Typescript Promise.allと僕が使って便利だったその他の関数

typescript-promise-util
  • URLをコピーしました!

この記事では、非同期処理を扱うのに便利な関数を紹介します!

もちた

僕は、開発で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);
}
typescript-promise-util

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次