如何手动清理通过自动调用功能创建的调用堆栈

时间:2019-02-02 05:10:30

标签: javascript callstack

(()=>{
    setTimeout(() => {
        // some function
    },3000);
})();

上面的代码在for循环内运行,我想要的是我应该能够阻止执行setTimeout调用堆栈(该堆栈在发生超时时执行)并且应该能够清除它。

1 个答案:

答案 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