比方說,我有一個功能log()
Javascript時間:我如何每5,7和8秒執行一次函數?
var log = function(i) {
console.log('Executing at time: ' + i);
}
而且我想在某個區間執行log()
,每x,y和z秒?
讓我們隨意設置X,Y和Z 5,7,和8
var x = 5;
var y = 7;
var z = 8;
而且每x,y和z秒我想打電話給log()
:
// Every 5 seconds:
log(x);
// Every 7 seconds:
log(y);
// Every 8 seconds:
log(z);
我可以嘗試使用三個setTimeout()
來單獨運行這些功能。但是等一下,javascript是不是異步的,所以執行一個setTimeout()
會阻止另外兩個執行......嗯......
我可以計算出在時間上的差異,這樣就造成了第一個延遲setTimeout()
不會打破第二和第三的時間:
// x is at 5 seconds, run 5000 milliseconds after the start
setTimeout(function() { log(x); }, 5000);
// y is at 7 seconds after start, or 2000 milliseconds after x is done
setTimeout(function() { log(y); }, 2000);
// z is at 7 seconds after start, or 1000 milliseconds after y is done
setTimeout(function() { log(z); }, 1000);
但時間絕不會完全正確的,因爲我log()
函數的執行將至少需要的少量時間。此外,當我嘗試在其中添加更多log()
命令時,或者當我嘗試以設定的時間間隔重複整個過程時,這會變得雜亂無章。
我可以用一個環路,算上秒,和在x,y和ZTH第二,執行我的命令:
var i = 0;
while(i<10) {
// wait 1 second (pointless function, don't know a better way to wait a second)
setTimeout(function() { console.log(' ... '); }, 1000);
i++;
// execute x, y, or z depending on what time it is
switch(i) {
case 4:
log(x);
case 6:
log(y);
case 7:
log(z);
}
}
但「計數」,這種方法,其中,我執行無用命令使用setTimeout(),真的讓我感到低效。
有沒有更好的方法來測量JavaScript中的時間,並在將來的某個時間執行一個函數?對我而言,關鍵在於它不僅僅是「每5秒運行一次log()
」,因爲我明白這一點。它「在時間x,y和z上運行log()
」令我困惑。
爲什麼不只是'setInterval(func1,5000); setInterval(func2,7000); setInterval(func3,8000);'? –
有沒有辦法讓時間完全與JS完美。 'setInterval'和'setTimeout'只能保證*在間隔過去之後*嘗試*運行函數*。他們不強制*確切*間隔已經過去。 – zzzzBov
既然你關心例程本身引入的時間延遲,也許網絡工作者會在這裏幫忙?也就是說,每5,7和8秒,你就把例行程序傳遞給一個不妨礙執行其他呼叫的工作者。 – Marc