2017-02-25 89 views
-4

我想说,这是因为我很少了解JS,因为你可能会知道,我也不知道该怎么称呼它。虽然循环条件和setInterval()

无论如何,我试图做一个简单的脚本,它计数达30分钟,然后在30分钟通过使用while循环返回一条消息。但是,我希望heliTime =! endTime只能每分钟运行一次。我可以让脚本每分钟运行一次,但每分钟运行整个功能而不是一次检查。

setInterval(function arran() { 
 
    var startTime = 0; 
 
    var minutes = 1000 * 60; 
 
    //var seconds = 1000; 
 
    var heliTime = startTime 
 
    var endTime = 30 * minutes; 
 
    var messageCount = 0; 
 

 
while (heliTime !== endTime) { 
 
    var messageCount = messageCount + 1; 
 
    console.log("No heli yet! " + messageCount); 
 
    var heliTime = heliTime + minutes; 
 
} 
 
return console.log("Heli should be arriving soon!"); 
 
},60 * 1000);

的messageCount变量只是调试,这样可以忽略不计,与我的问题任何帮助将不胜感激。 :)

回答

0

我会说,通过setInterval作为Tobbe Widner的回调频率来衡量实时,在我看来这是一个奇怪的想法。我认为最好使用一些明确的时间源,如

function runDelayedWithProgress(waitIntervalSeconds, delayedAction, progressIntervalSeconds, progressAction) { 
    var startTime = new Date().getTime(); 
    var iid = setInterval(function() { 
    var curTime = new Date().getTime() 
    var elapsedSeconds = (curTime - startTime)/1000; 
    if(elapsedSeconds >= waitIntervalSeconds) { 
     clearInterval(iid); 
     delayedAction(); 
    } 
    else { 
     progressAction(Math.round(elapsedSeconds)); 
    } 
    }, progressIntervalSeconds*1000); 
} 

runDelayedWithProgress(30*60, function() { 
     console.log("Heli should be arriving soon!") 
    }, 
    60, function(elapsed){ 
    console.log("No heli yet! " + elapsed); 
}); 
+0

完全谢谢。不熟悉大多数这一点,但我必须研究它。我试图按照我的方式去做的原因主要是缺乏知识。 –

+0

谢谢你的提醒。当然你对实时处理是正确的。实际上我对自己有些惭愧,因为我应该知道这一点(我参与了图形缓冲区处理的编程,实时处理可以说是非常重要的xD) –