如果内部函数已完成处理,如何取消setTimeout?
How to cancel setTimeout if function inside has done processing?
我有一个执行某些处理的函数 A
A().then({
check if error saveStatus(failure)
if not then saveStatus(Success)
});
我想为上面的函数添加一个超时,这样如果它有写入状态那么它应该超时否则如果 success/failure none 被写入数据库可以采取进一步的行动.
有什么方法可以知道函数 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 });
}
此代码段摘自开源代码 I've written time ago。
所以,如果你有一个想要超时的承诺,你可以像这样使用它:
PromiseTimeout(A(), 1000) // 1 sec timeout
.then(() => everything ok and not timeout)
.catch((err) => maybe error maybe timeout)
我有一个执行某些处理的函数 A
A().then({
check if error saveStatus(failure)
if not then saveStatus(Success)
});
我想为上面的函数添加一个超时,这样如果它有写入状态那么它应该超时否则如果 success/failure none 被写入数据库可以采取进一步的行动.
有什么方法可以知道函数 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 });
}
此代码段摘自开源代码 I've written time ago。
所以,如果你有一个想要超时的承诺,你可以像这样使用它:
PromiseTimeout(A(), 1000) // 1 sec timeout
.then(() => everything ok and not timeout)
.catch((err) => maybe error maybe timeout)