(()=>{
setTimeout(() => {
// some function
},3000);
})();
上面的代码在for循环内运行,我想要的是我应该能够阻止执行setTimeout
调用堆栈(该堆栈在发生超时时执行)并且应该能够清除它。
答案 0 :(得分:1)
我假设您以这种方式执行了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