【发布时间】:2021-04-28 12:03:44
【问题描述】:
我想要一个可以做一些工作的函数,如果某个条件为真,那么就解决 promise。如果没有,请稍等(让我们说一秒钟)然后再试一次。除此之外,如果时间限制到期,promise 将拒绝。我怎么能那样做?看看我的代码示例...如果我将整个函数包装在 return new Promise() 中,我不能在其中使用 await(我需要...如果条件失败,我需要休眠一段时间,而且我还需要等待我在函数结束时等待)。
这是我的代码示例:
async funcWithTimeLimit(numberToDecrement, timeLimit){
let sleep = undefined;
let timeLimitTimeout = setTimeout(() => {
if (sleep)
clearTimeout(sleep);
return Promise.reject("Time limit of " + (timeLimit/1000) +" secs expired"); //reject
}, timeLimit);
while(numberToDecrement > 0){
for(let i = 10;(i > 0 && numberToDecrement > 0); i--){ //Do some work
numberToDecrement--;
}
if(numberToDecrement > 0){
await new Promise(resolve => sleep = setTimeout(resolve, 1000));
}
}
clearTimeout(timeLimitTimeout);
await new Promise((resolve, reject) => sleep = setTimeout(resolve, 500)); // Do something
return ""; //resolve
}
注意:我最大的问题是 - 我如何编写这个函数以在时间限制到期的情况下捕获拒绝(在我调用 funcWithTimeLimit() 的地方)?
【问题讨论】:
标签: javascript promise async-await timeout cancellation