我有一个执行一些处理的函数A
A().then({
check if error saveStatus(failure)
if not then saveStatus(Success)
});
我想为上述函数添加超时,以便如果它具有写入状态,那么如果成功/失败没有写入数据库,则应超时,否则可以采取进一步的操作。
有什么方法可以知道函数 A 处理 saveStatus() 并在同一时刻取消超时?
是的,您可以使用这个:
function PromiseTimeout(promise, ms) {
let timeout;
return Promise.race([
promise,
new Promise((_, reject) => {
timeout = setTimeout(() => reject(new Error('timeout')), ms)
})
]).then(x => { clearTimeout(timeout); return x });
}
这个片段是从我很久以前写的开源代码中提取的。
所以,如果你有一个想要超时的承诺,你可以像这样使用它:
PromiseTimeout(A(), 1000) // 1 sec timeout
.then(() => everything ok and not timeout)
.catch((err) => maybe error maybe timeout)