JavaScript異步編程怎樣處理超時(shí)

小樊
81
2024-10-25 05:58:55

在 JavaScript 中,可以使用 Promise 和 setTimeout 結(jié)合來(lái)實(shí)現(xiàn)異步操作的超時(shí)處理。以下是一個(gè)簡(jiǎn)單的示例:

function asyncOperation(operation, timeout) {
  return new Promise((resolve, reject) => {
    // 創(chuàng)建一個(gè)定時(shí)器,用于在指定時(shí)間后執(zhí)行操作
    const timer = setTimeout(() => {
      reject(new Error('Operation timed out'));
    }, timeout);

    // 執(zhí)行異步操作,并在操作完成后清除定時(shí)器
    operation()
      .then((result) => {
        clearTimeout(timer);
        resolve(result);
      })
      .catch((error) => {
        clearTimeout(timer);
        reject(error);
      });
  });
}

// 使用示例
const operation = () => {
  return new Promise((resolve) => {
    console.log('異步操作開(kāi)始');
    setTimeout(() => {
      console.log('異步操作完成');
      resolve();
    }, 2000);
  });
};

asyncOperation(operation, 1000)
  .then((result) => {
    console.log('操作成功');
  })
  .catch((error) => {
    if (error.message === 'Operation timed out') {
      console.log('操作超時(shí)');
    } else {
      console.log('操作失敗');
    }
  });

在這個(gè)示例中,我們定義了一個(gè)名為 asyncOperation 的函數(shù),它接受兩個(gè)參數(shù):一個(gè)異步操作函數(shù) operation 和一個(gè)超時(shí)時(shí)間 timeout(以毫秒為單位)。這個(gè)函數(shù)返回一個(gè)新的 Promise,當(dāng)異步操作在指定時(shí)間內(nèi)完成時(shí),Promise 會(huì)被解析;否則,它會(huì)被拒絕并返回一個(gè)包含超時(shí)錯(cuò)誤的消息。

我們可以通過(guò)調(diào)用 asyncOperation 函數(shù)并傳入異步操作函數(shù)和超時(shí)時(shí)間來(lái)執(zhí)行異步操作并處理超時(shí)。在這個(gè)示例中,我們模擬了一個(gè)耗時(shí) 2 秒的異步操作,并設(shè)置了 1 秒的超時(shí)時(shí)間。因此,操作會(huì)因?yàn)槌瑫r(shí)而失敗,并在控制臺(tái)輸出 “Operation timed out”。

0