JavaScriptでタイムアウト後に解決するプロミスの作成方法


方法1: setTimeoutを使用してタイムアウトを実装する方法

function timeoutPromise(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(new Error('タイムアウトエラー'));
    }, ms);
  });
}
// 使用例:
const longRunningTask = new Promise((resolve, reject) => {
  // 長時間かかる非同期のタスクを実行する
});
Promise.race([longRunningTask, timeoutPromise(5000)])
  .then(result => {
    // タスクが正常に完了した場合の処理
  })
  .catch(error => {
    // タイムアウトエラーまたはその他のエラーの処理
  });

方法2: async/awaitを使用してタイムアウトを実装する方法

function timeoutPromise(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(new Error('タイムアウトエラー'));
    }, ms);
  });
}
// 使用例:
async function runTaskWithTimeout() {
  try {
    const result = await Promise.race([longRunningTask, timeoutPromise(5000)]);
    // タスクが正常に完了した場合の処理
  } catch (error) {
    // タイムアウトエラーまたはその他のエラーの処理
  }
}
runTaskWithTimeout();

上記のコード例では、timeoutPromise関数を使用してタイムアウトを実装しています。この関数は、指定された時間(ミリ秒)が経過した後にエラーを発生させます。その後、Promise.raceメソッドを使用して、長時間かかる非同期のタスクのプロミスとタイムアウトプロミスのいずれかが最初に解決されるまで待ちます。解決されたプロミスに応じて処理を行うことができます。

このように、JavaScriptではタイムアウト後に解決するプロミスを作成するためのさまざまな方法があります。必要に応じて、上記のコード例をカスタマイズして使用してください。