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


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(( 正在工作,我如何接收消息...

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

一个非常简单的方法是使用setTimeout它将在将来停止运行指定的函数,或者setInterval将定期运行它。

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

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

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