(()=>{
setTimeout(() => {
// some function
},3000);
})();
上面的代码在 for 循环内运行,我想要的是我应该能够阻止执行 setTimeout
调用堆栈,该调用堆栈在超时发生时执行并且应该能够清除它。
最佳答案
我假设您以这种方式执行了 IIFE,并且您想清除从 for 循环内部发出的超时:
for(let i=0; i< 4; i++){
(()=>{
setTimeout(() => {
console.log("done");
},3000);
})();
}
在这种情况下,setTimeout()
返回一个 id
,您可以使用它来清除发出的超时:
const arr = []
for(let i=0; i< 4; i++){
(()=>{
let id = setTimeout(() => {
console.log("done");
},3000);
arr.push(id);
})();
}
arr.forEach((id)=>clearTimeout(id)); //done not printed in console as timeout was cancelled
关于javascript - 如何手动清理由自调用函数创建的调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54490175/