Интервал тайм-аута в Javascript: как закончить тайм-аут - PullRequest
0 голосов
/ 15 февраля 2020

Как я могу внедрить в функцию TimerBreed возможность завершения повторной функции автопороды

например, когда whichFrog == "second" завершают первую и третью автопороды l oop так, что только вторая автопородка заканчивается l oop выполняется.

function autoBreed(x, value1, value2, value3){
    population[x] = population[x] + 1;
    setTimeout(autoBreed, 1000, x, value1, value2, value3);
    document.getElementById(value1.toString()).innerHTML = "+1 PER SECOND";
    document.getElementById(value2.toString()).innerHTML = "<b>" + value3.toString() + "</b> Population: " + population[x];
}
function timerBreed(buttonVar, whichFrog){
    if (whichFrog == "first"){      
        autoBreed(0, "autoParaOne", "valueFrogPopOne", "First");    
    } else if (whichFrog == "second"){  
        autoBreed(1, "autoParaTwo", "valueFrogPopTwo", "Second");       
    } else if (whichFrog == "third"){       
        autoBreed(2, "autoParaThree", "valueFrogPopThree", "Third");        
    }
}

1 Ответ

0 голосов
/ 15 февраля 2020

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

let timer;
function autoBreed(x, value1, value2, value3){
    population[x] = population[x] + 1;
    timer = setTimeout(autoBreed, 1000, x, value1, value2, value3);
    document.getElementById(value1.toString()).innerHTML = "+1 PER SECOND";
    document.getElementById(value2.toString()).innerHTML = "<b>" + value3.toString() + "</b> Population: " + population[x];
}

function timerBreed(buttonVar, whichFrog){
    if (whichFrog == "first"){      
        autoBreed(0, "autoParaOne", "valueFrogPopOne", "First");    
    } else if (whichFrog == "second"){  
        //autoBreed(1, "autoParaTwo", "valueFrogPopTwo", "Second");   
        clearTimeout(timer);
    } else if (whichFrog == "third"){       
        autoBreed(2, "autoParaThree", "valueFrogPopThree", "Third");        
    }
}
...