在 NodeJS 中可暂停的计时器
A timer that is pausable in NodeJS?
我将如何创建一个可以使用 NodeJS 暂停的计时器?
我正在考虑使用 setInterval/setTimeout,但不确定它是否会像我想要的那样工作?(因为没有"暂停")
基本上,我想要每 5 分钟重复一次计时器(例如),但是如果我执行某个操作,我希望它暂停,然后在另一个操作上取消暂停。
您不会在node.js中暂停计时器。 相反,您可以启动和停止计时器。
如果您想以与它继续运行时剩余的剩余时间相同的时间再次启动它,那么您只需要跟踪该时间量。
这里有一个小对象的想法,它允许你启动和停止计时器:
var Timer = function(t, fn, go) {
var timer, tRemaining, tStarted;
if (!t || !fn) {
throw new Error("Must specify time and callback function");
}
tRemaining = t;
if (go) {
this.start();
}
this.start = function() {
if (!timer) {
tStarted = new Date().getTime();
timer = setTimeout(fn, tRemaining);
}
};
this.pause = function() {
if (timer) {
clearTimeout(timer);
timer = null;
var now = new Date().getTime();
tRemaining -= now - tStarted;
}
}
}
// usage
var t = new Timer(5000, function() {
// this will be called when the timer is done
});
t.start();
// some time later
t.pause();
// some time later
t.start();
很久
以前,我在一个遥远的要点中创建了一个用于增量计时的构造函数。调用DeltaTimer
的构造函数可以在需要时启动、停止(暂停)和重新启动(恢复)。
以下是它的使用方法:
var output = $("output"), start;
var timer = new DeltaTimer(function (now) {
output.innerHTML = (now - start) / 1000;
}, 1000);
$("start").addEventListener("click", function () {
start = timer.start();
});
$("stop").addEventListener("click", timer.stop);
function $(id) {
return document.getElementById(id);
}
<button id="start">Start</button>
<button id="stop">Stop</button>
<span id="output"></span>
<script>
function DeltaTimer(render, interval) {
var timeout;
var lastTime;
this.start = start;
this.stop = stop;
function start() {
timeout = setTimeout(loop, 0);
lastTime = Date.now();
return lastTime;
}
function stop() {
clearTimeout(timeout);
return lastTime;
}
function loop() {
var thisTime = Date.now();
var deltaTime = thisTime - lastTime;
var delay = Math.max(interval - deltaTime, 0);
timeout = setTimeout(loop, delay);
lastTime = thisTime + delay;
render(thisTime);
}
}
</script>
如您所见,计时器以非常小的误差范围自行校正。此外,它可以很容易地停止和重新启动。
希望有帮助。
相关文章:
- 如何在窗体打开时从javascript倒计时计时器值中节省时间
- 设置倒计时计时器,IE出现问题
- MobileFirst:在客户端运行计时器作业-最佳选项
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 倒计时计时器应该持续两个php页面
- 在Jquery倒计时计时器上设置每个数字的动画
- 我如何才能确保计时器设置为每天4点半,所以我不会;不用在Javascript中提及某个日期
- 如何在隐藏时暂停jquery计时器
- 在 NodeJS 中可暂停的计时器
- 如何将鼠标悬停在幻灯片上时暂停角间隔计时器
- 这个JS计时器是如何暂停的
- 如何使用请求动画帧暂停和重新启动秒表计时器
- 当选项卡未处于焦点中时暂停 Javascript 计时器
- 如何使用 jQuery 从暂停的位置恢复计时器
- 倒计时计时器:暂停按钮获胜't暂停或改回播放按钮
- 在angularjs中使用$timeout时,如何暂停和恢复计时器
- 如何在javascript中使用一个按钮恢复和暂停计时器
- 如何暂停和恢复javascript计时器
- 暂停倒计时计时器(JavaScript)
- 如何在AndroidScript(Android Javascript IDE)中暂停计时器