在 JavaScript 中,可以使用 Promise 和 setTimeout 結合來實現異步操作的超時處理。以下是一個簡單的示例:
function asyncOperation(operation, timeout) {
return new Promise((resolve, reject) => {
// 創建一個定時器,用于在指定時間后執行操作
const timer = setTimeout(() => {
reject(new Error('Operation timed out'));
}, timeout);
// 執行異步操作,并在操作完成后清除定時器
operation()
.then((result) => {
clearTimeout(timer);
resolve(result);
})
.catch((error) => {
clearTimeout(timer);
reject(error);
});
});
}
// 使用示例
const operation = () => {
return new Promise((resolve) => {
console.log('異步操作開始');
setTimeout(() => {
console.log('異步操作完成');
resolve();
}, 2000);
});
};
asyncOperation(operation, 1000)
.then((result) => {
console.log('操作成功');
})
.catch((error) => {
if (error.message === 'Operation timed out') {
console.log('操作超時');
} else {
console.log('操作失敗');
}
});
在這個示例中,我們定義了一個名為 asyncOperation
的函數,它接受兩個參數:一個異步操作函數 operation
和一個超時時間 timeout
(以毫秒為單位)。這個函數返回一個新的 Promise,當異步操作在指定時間內完成時,Promise 會被解析;否則,它會被拒絕并返回一個包含超時錯誤的消息。
我們可以通過調用 asyncOperation
函數并傳入異步操作函數和超時時間來執行異步操作并處理超時。在這個示例中,我們模擬了一個耗時 2 秒的異步操作,并設置了 1 秒的超時時間。因此,操作會因為超時而失敗,并在控制臺輸出 “Operation timed out”。