Как вручную очистить стек вызовов, созданный функцией Self invoking - PullRequest
0 голосов
/ 02 февраля 2019
(()=>{
    setTimeout(() => {
        // some function
    },3000);
})();

Вышеупомянутый код выполняется внутри цикла for, я хочу, чтобы я был в состоянии предотвратить выполнение стека вызовов setTimeout, который выполняется при истечении времени ожидания, и должен иметь возможность его очистить.

1 Ответ

0 голосов
/ 02 февраля 2019

Я предполагаю, что вы выполнили 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
...