Sie können clearInterval()
nach x Anrufen anrufen :
var x = 0;
var intervalID = setInterval(function () {
if (++x === 5) {
window.clearInterval(intervalID);
}
}, 1000);
Um globale Variablen zu vermeiden, wäre eine Verbesserung der oben genannten:
function setIntervalX(callback, delay, repetitions) {
var x = 0;
var intervalID = window.setInterval(function () {
callback();
if (++x === repetitions) {
window.clearInterval(intervalID);
}
}, delay);
}
Dann können Sie die neue setInvervalX()
Funktion wie folgt aufrufen :
setIntervalX(function () {
}, 1000, 5);
clearInterval
Ihren Rückruf so oft eingeben, wie Sie möchten, und ihn auf eine beliebige Logik reagieren lassen. Es ist nicht erforderlich, einen Bool zurückzugeben, um das gleiche Ergebnis zu erzielen.Sie können setTimeout und eine for-Schleife verwenden.
var numberOfTimes = 20; delay = 1000; for (let i = 0; i < numberOfTimes; i++) { setTimeout( doSomething, delay * i); }
quelle
Sie können ein Timeout festlegen, das aufruft
clearInterval
. Das sollte funktionieren:function setTimedInterval(callback, delay, timeout){ var id=window.setInterval(callback, delay); window.setTimeout(function(){ window.clearInterval(id); }, timeout); }
quelle
Ich persönlich bevorzuge die Verwendung von
setTimeout()
Abständen, um den gleichen Effekt zu erzielen// Set a function to run every "interval" seconds a total of "x" times var x = 10; var interval = 1000; for (var i = 0; i < x; i++) { setTimeout(function () { // Do Something }, i * interval) }
Es ist keine Reinigung erforderlich
clearInterval()
Sie können es einschließen, um das Auslaufen von Variablen zu vermeiden, und es sieht ziemlich sauber aus :)
// Definition function setIntervalLimited(callback, interval, x) { for (var i = 0; i < x; i++) { setTimeout(callback, i * interval); } } // Usage setIntervalLimited(function() { console.log('hit'); // => hit...hit...etc (every second, stops after 10) }, 1000, 10)
quelle
Dadurch wird das Intervall nach 10 Anrufen gelöscht
<html> <body> <input type="text" id="clock" /> <script language=javascript> var numOfCalls = 0; var int=self.setInterval("clock()",1000); function clock() { var d=new Date(); var t=d.toLocaleTimeString(); document.getElementById("clock").value=t; numOfCalls++; if(numOfCalls == 10) window.clearInterval(int); } </script> </form> </body> </html>
quelle
Und für diejenigen unter euch, die setTimeout und liebevolle Rekursion bevorzugen, ist hier mein Vorschlag;)
const setIntervalX = (fn, delay, times) => { if(!times) return setTimeout(() => { fn() setIntervalX(fn, delay, times-1) }, delay) }
Dann können Sie wie vorgeschlagen die neue
setInvervalX()
Funktion wie folgt aufrufen :// This will be repeated every for 5 times with 1 second intervals: setIntervalX(function () { // Your logic here }, 1000, 5);
quelle
Ich habe ein kleines Paket gemacht, das dies für NodeJS macht.
https://www.npmjs.com/package/count-interval
Es ist ein Drop-In-Ersatz für setInterval (einschließlich Parameterübergabe), es wird jedoch ein zusätzlicher
count
Parameter benötigt. In diesem Beispiel wird eine Nachricht einmal pro Sekunde, jedoch nur dreimal gedruckt.const countInterval = require('./countInterval'); const timer = countInterval(() => { console.log('fired!', new Date()); }, 1000, 3);
quelle