DOM-händelser - Stoppa setInterval-anrop i JavaScript
Jag använder setInterval(fname, 10000); för att anropa en funktion var 10:e sekund i JavaScript. Är det möjligt att sluta anropa den vid någon händelse?
Jag vill att användaren ska kunna stoppa den upprepade uppdateringen av data.
Svar #1
setInterval() returnerar ett interval-ID, som du kan skicka till clearInterval():
var refreshIntervalId = setInterval(fname, 10000);
/* later */
clearInterval(refreshIntervalId);
Se dokumentationen för setInterval() och clearInterval().
Svar #2
Om du tilldelar returvärdet av setInterval till en variabel kan du använda clearInterval för att stoppa det.
var myTimer = setInterval(...);
clearInterval(myTimer);
Svar #3
Du kan sätta en ny variabel och få den att ökas med ++ (räkna upp med ett) varje gång det körs, sedan använder jag ett villkorsuttalande för att avsluta det:
var intervalId = null;
var varCounter = 0;
var varName = function(){
if(varCounter <= 10) {
varCounter++;
/* your code goes here */
} else {
clearInterval(intervalId);
}
};
$(document).ready(function(){
intervalId = setInterval(varName, 10000);
});
Jag hoppas att det hjälper och att det är rätt.
Svar #4
Redan besvarat... Men om du behöver en funktionell, återanvändbar timer som också stöder flera uppgifter på olika intervaller, kan du använda min TaskTimer (för Node och webbläsare).
// Timer with 1000ms (1 second) base interval resolution.
const timer = new TaskTimer(1000);
// Add task(s) based on tick intervals.
timer.add({
id: 'job1', // unique id of the task
tickInterval: 5, // run every 5 ticks (5 x interval = 5000 ms)
totalRuns: 10, // run 10 times only. (omit for unlimited times)
callback(task) {
// code to be executed on each run
console.log(task.name + ' task has run ' + task.currentRuns + ' times.');
// stop the timer anytime you like
if (someCondition()) timer.stop();
// or simply remove this task if you have others
if (someCondition()) timer.remove(task.id);
}
});
// Start the timer
timer.start();
I ditt fall, när användare klickar för att störa datauppdateringen; kan du också kalla timer.pause() och sedan timer.resume() om de behöver aktivera igen.
Se mer här.
Svar #5
Tricket
setInterval returnerar ett nummer:
Lösning
Ta detta nummer. Skicka det till funktionen clearInterval så är du säker:
Kod:
Spara alltid det returvärde som setInterval ger i en variabel, så att du kan stoppa intervallet senare:
const intervalID = setInterval(f, 1000);
// Some code
clearInterval(intervalID);
(Tänk på detta nummer som ID för ett setInterval. Även om du har anropat många setInterval, kan du fortfarande stoppa vilken som helst av dem genom att använda rätt ID.)
Svar #6
I nodeJS kan du använda det speciella nyckelordet "this" inom setInterval-funktionen.
Du kan använda detta this-nyckelord för clearInterval, och här är ett exempel:
setInterval(
function clear() {
clearInterval(this)
return clear;
}()
, 1000)
När du skriver ut värdet av this nyckelordet inom funktionen får du ett Timeout-objekt Timeout {...}

