node.js-process.on('message'....)在无限循环外不起作用

时间:2018-06-21 15:26:18

标签: node.js

process.on('message', (data) => {
  console('on receive message')
})

generate()

function generate () {
  func()     //method which have while-loop which will takes about 10 mins.
  generate()
}

当func()工作时,我无法收到消息。 仅在func()finsiehd之后收到堆叠的消息。

即使func()正在工作,我也如何接收消息...

1 个答案:

答案 0 :(得分:0)

NodeJS是单线程应用程序。因此,运行约10分钟的循环将阻止任何其他代码的所有处理。您需要释放执行堆栈以允许其他未决代码运行。

一种非常简单的方法是使用setTimeout(将来将停止运行指定的函数)或setInterval(将定期运行该函数)。

setInterval(generate, 600000); // Run generate every 10 minutes

其他选项包括async/await + Bluebird Promise.delay或npm上的各种排队/异步库。

如果您绝对需要func来执行,则需要检查其他选项。如前所述,nodejs是一个单线程应用程序。您可以在另一个nodeJS进程中进行处理,或者需要重新设计func,使其在队列中执行,以便定期清除执行堆栈,以便可以运行挂起的任务。