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()正在工作,我也如何接收消息...
答案 0 :(得分:0)
NodeJS是单线程应用程序。因此,运行约10分钟的循环将阻止任何其他代码的所有处理。您需要释放执行堆栈以允许其他未决代码运行。
一种非常简单的方法是使用setTimeout
(将来将停止运行指定的函数)或setInterval
(将定期运行该函数)。
setInterval(generate, 600000); // Run generate every 10 minutes
其他选项包括async/await
+ Bluebird Promise.delay
或npm上的各种排队/异步库。
如果您绝对需要func
来执行,则需要检查其他选项。如前所述,nodejs是一个单线程应用程序。您可以在另一个nodeJS进程中进行处理,或者需要重新设计func
,使其在队列中执行,以便定期清除执行堆栈,以便可以运行挂起的任务。