首页 > 解决方案 > node.js - 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() 正在工作,我如何才能收到消息...

标签: node.js

解决方案


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

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

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

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

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


推荐阅读