Node.js 使用readline sync时如何不退出节点进程?

Node.js 使用readline sync时如何不退出节点进程?,node.js,npm,Node.js,Npm,我正在用node创建一个pomodoro计时器 目前,我以so node start.js编码的形式启动项目 我在工作的时候就这么做了。当我需要休息时,我会终止这个过程,我花在编码get上的时间也会被添加到JSON文件中 { "code": [ { "seconds": 1, "time": "00 : 00 : 01", "date": "

我正在用node创建一个pomodoro计时器

目前,我以so node start.js编码的形式启动项目

我在工作的时候就这么做了。当我需要休息时,我会终止这个过程,我花在编码get上的时间也会被添加到JSON文件中

{
  "code": [
    {
      "seconds": 1,
      "time": "00 : 00 : 01",
      "date": "2020-06-28T03:08:42.340Z"
    }
  ],
  "read": [],
  "write": []
}
现在我只是在想我将来需要的东西,我肯定会忘记上面对象中的键。是编码,编码,写,写吗?所以我想我会得到一个提示

var objKeys = [...Object.keys(obj), 'info']
const inputVariable =  objKeys[readline.keyInSelect(objKeys, 'What are you going to be working on?')]
事实上,一旦我做出选择,进程就会终止,我不希望这样

我可以在我想要终止的时候做出选择,但很可能会让人困惑

是否有一种方法可以进行选择并保持流程运行

编辑

问题在于用户输入inputVariable时,流程就结束了

time.timeEntryobj、start、inputVariable只是将一些计时信息读写到JSON中

var fs = require('fs');
var getTime = require('./getTime')

const timeEntry = (obj, start, segment ) => {
let totalSeconds = process.hrtime(start)[0];
  obj[segment].push({
        seconds: totalSeconds,
        time: getTime.getTime(totalSeconds),
        date: new Date
      })

  let data = JSON.stringify(obj);
  fs.writeFileSync('data.json', data , 'utf-8');
}
exports.timeEntry = timeEntry;

我不需要使用readline sync,如果我改为使用const inputVariable=process.argv[2]并运行node start.js编码,进程将不会终止,这正是我想要的

从用户处读入inputVariable 定义函数exitHandler 告诉节点在程序退出时调用exitHandler 告诉节点在接收到SIGINT时调用exitHandler 请注意,这些步骤都不涉及调用exitHandler,也不涉及为此执行任何其他操作,例如,这里没有等待任何事情发生的代码

可能是由于使用process.on造成了混淆:此函数告诉节点,当它接收到SIGINT时(例如,您按下Ctrl-C),它应该调用exitHandler。特别是,这不会告诉您的程序在收到SIGINT之前暂停执行。因此,在调用process.on之后,您的代码将继续运行,但没有更多的代码可运行,因此进程将在接收到SIGINT之前结束

似乎你希望你的程序在收到信号之前什么都不做;在这种情况下,您可以添加

while (true) {}

或类似的结尾。因此,您的代码将永远不会执行任何操作,直到它收到SIGINT,然后它将调用existandler。

在该代码段之后是否有代码?如果这是整个文件,那么这个过程确实会在完成执行后结束。整个代码都在这之后。计算所用时间的代码,读取JSON文件,修改文件内容,然后写入。这一切都是可行的,但我不想让它终止;你能分享后面的部分代码吗?否则,将很难对此进行分析further@Alex我添加了更多的代码-希望它是清晰的,如果我删除了readline sync程序的工作方式,我希望它不做任何事情,直到Ctrl-C。但是readline sync结束了这个过程。我不想那样。如果我硬编码inputVariable的值,那么一切都会像您描述的那样工作得很好。但是readline sync不允许程序等待我的Ctrl+C,而是立即终止-我在问是否有办法防止这种情况发生。如果true{},我应该添加到哪里?如果true{}毫无价值。这只会挂起程序并阻塞事件循环,因此无法调用任何东西,程序也无法执行任何操作。那没有意义。程序需要监听一些未来事件以保持活动状态-计时器、打开的套接字、打开的服务器等。。。它应该有一些理由仍然在运行。
while (true) {}