我有一个简单的心跳过程应该永远运行并继续跳动,但是一旦我启动就会死掉。
$ node heartbeat.js
Starting heartbeats
$
我的心跳脚本很简单。
var heartbeats = require('heartbeats');
// tell me that the script is starting
console.log('Starting heartbeats');
// create a heart that beats every second
var heart = heartbeats.createHeart(1000);
// every heartbeat, tell me the beat number
heart.createEvent(1, function(heartbeat, last){
console.log('beat number ' + heart.age);
});
但是,最后添加process.stdin.resume();
会使其永久运行:
$ node heartbeat.js
Starting heartbeats
beat number 1
beat number 2
beat number 3
...
为什么会这样做?
答案 0 :(得分:2)
heartbeats
为其设置的计时器.unref
调用process.stdin.resume();
,这意味着它不需要事件循环保持活动状态。
由于您的示例中没有其他侦听器,因此退出。
heartbeats
使节点等待用户的输入,因此进程保持活动状态。
看起来navigationIcon
并不意味着只让应用程序保持活着,而是在后台运行。
答案 1 :(得分:1)
已编辑的答案
在回答您的问题时,我刚刚发布了Heartbeats ^4.0.1。现在,如果有任何事件被创建,它将使您的应用程序保持活动状态,并将继续保持活动状态,直到最后一个事件完成。
感谢您指出这一点!
原始答案
我是模块的作者,而@SergeyLapin是正确的。 Heartbeats目前不是为了让您的应用程序保持活力。我想,这对大多数人来说都是预期的行为。
但是,您可以通过在代码末尾添加来保持应用程序的活跃:
heart.interval.ref();
我将修改API并添加一项新功能,以确保在有事件的情况下,应用程序至少在有事件时保持活动状态。