Javascript-setInterval에게 x 번만 실행하도록 지시합니까?
자바 스크립트에서 setInterval이 실행되는 시간을 제한 할 수 있습니까?
x 호출 clearInterval()
후에 호출 할 수 있습니다 .
var x = 0;
var intervalID = setInterval(function () {
// Your logic here
if (++x === 5) {
window.clearInterval(intervalID);
}
}, 1000);
전역 변수를 피하기 위해 위의 개선 사항은 다음과 같습니다.
function setIntervalX(callback, delay, repetitions) {
var x = 0;
var intervalID = window.setInterval(function () {
callback();
if (++x === repetitions) {
window.clearInterval(intervalID);
}
}, delay);
}
그런 setInvervalX()
다음 다음과 같이 새 함수를 호출 할 수 있습니다 .
// This will be repeated every for 5 times with 1 second intervals:
setIntervalX(function () {
// Your logic here
}, 1000, 5);
나는 개인적으로 setTimeout()
동일한 효과를 얻기 위해 공백을 사용하는 것을 선호 합니다.
// 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)
}
정리가 필요하지 않습니다. clearInterval()
변수 누출을 피하기 위해 그것을 묶을 수 있으며 꽤 깨끗해 보입니다. :)
// 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)
setTimeout 및 for 루프를 사용할 수 있습니다.
var numberOfTimes = 20;
delay = 1000;
for (let i = 0; i < numberOfTimes; i++) {
setTimeout( doSomething, delay * i);
}
을 호출하는 시간 제한을 설정할 수 있습니다 clearInterval
. 이것은 작동합니다.
function setTimedInterval(callback, delay, timeout){
var id=window.setInterval(callback, delay);
window.setTimeout(function(){
window.clearInterval(id);
}, timeout);
}
10 회 호출 후 간격이 지워집니다.
<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>
NodeJS를 위해이 작업을 수행하는 작은 패키지를 만들었습니다.
https://www.npmjs.com/package/count-interval
It's a drop-in replacement for setInterval (including parameter passing), but it takes an additional count
parameter. This example prints a message once every second, but only 3 times.
const countInterval = require('./countInterval');
const timer = countInterval(() => {
console.log('fired!', new Date());
}, 1000, 3);
And for those of you preferring setTimeout and loving recursion here is my suggestion ;)
const setIntervalX = (fn, delay, times) => {
if(!times) return
setTimeout(() => {
fn()
setIntervalX(fn, delay, times-1)
}, delay)
}
Then as suggested you can call the new setInvervalX()
function as follows:
// This will be repeated every for 5 times with 1 second intervals:
setIntervalX(function () {
// Your logic here
}, 1000, 5);
ReferenceURL : https://stackoverflow.com/questions/2956966/javascript-telling-setinterval-to-only-fire-x-amount-of-times
'program story' 카테고리의 다른 글
디버그 빌드 변형에만 Stetho 포함 (0) | 2020.12.27 |
---|---|
Python / Json : 큰 따옴표로 묶인 속성 이름 예상 (0) | 2020.12.27 |
C ++ 문자열을 16 진수로 또는 그 반대로 변환 (0) | 2020.12.27 |
JSON 문자열을 Javascript의 JSON 객체 배열로 변환 (0) | 2020.12.27 |
Android-Facebook, Twitter, Mail, ecc에서 공유 (0) | 2020.12.27 |