在 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”。