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
,以便它在队列中执行,以便定期清除执行堆栈,以便挂起的任务可以运行。