我有一个异步任务需要执行很长时间,并且需要重复执行。
简单的解决方案是:
简单的解决方案是:
const timeoutPromise = delay => new Promise(resolve => setTimeout(resolve, delay));
async function infiniteRecursiveLoop() {
await longLastingWork();
await timeoutPromise(10000); // each time work is done, wait 10s and then run it again
infiniteRecursiveLoop();
}
由于我没有使用任何参数并且没有等待递归调用的结果,所以这应该不会泄漏任何内存,也不会导致堆栈溢出,对吗?因为我完全不确定。
我需要在最近的Firefox和Chrome中使用它。
编辑:
实际上我只需使用while(true) {...}
,没有必要使用递归:)。但是我仍然想知道。
编辑2:
经过更多测试的版本:
(async function infiniteRecursiveLoop() {
await Promise.resolve();
infiniteRecursiveLoop();
})();
看起来这是特定于环境的:
- NodeJS 12 - 没问题
- Chrome 77 - 没问题
- Firefox 70 - 存在内存泄漏,但没有堆栈溢出
但为什么呢...?
setInterval
有什么问题? - LiamsetInterval
不会等待长时间任务的执行。在我的情况下,该任务经常需要比间隔时间更长的时间才能完成。 - icl7126