如果内部函数已完成处理,如何取消设置超时



我有一个执行一些处理的函数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)

最新更新