node.js - 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() 正在工作,我如何才能收到消息...
解决方案
NodeJS 是一个单线程应用程序。因此,运行约 10 分钟的循环将阻止任何其他代码的所有处理。您需要释放执行堆栈以允许其他待处理代码运行。
一个非常简单的方法是使用setTimeout
which 将在将来停止运行指定的函数,或者setInterval
将定期运行它。
setInterval(generate, 600000); // Run generate every 10 minutes
其他选项包括async/await
+ BluebirdPromise.delay
或 npm 上的各种队列/异步库。
如果您绝对需要func
执行,那么您需要检查其他选项。正如我之前所说,nodejs 是一个单线程应用程序。您可以在另一个 nodeJS 进程中进行处理,或者您需要重新设计func
以便它在队列中执行,以便定期清除执行堆栈,以便可以运行挂起的任务。
推荐阅读
- facebook - Facebook 共享调试器返回“文档未返回数据”。
- android - BottomSheetDialogFragment - 指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()
- excel - 从excel中的列中的给定数字开始查找+1的所有增量
- laravel - Laravel - 具有 3 个模型的数据透视表,多对多和一对多
- rxjs - 有没有办法在不中断订阅的情况下一直订阅相同的值?
- cypress - 仅在元素仍然存在时进行测试
- php - PHP 正在命令行中工作,但浏览器中出现错误 502
- c - 如何在 Visual Studio 中修复“忽略返回值:'scanf'”代码 C6031
- google-cloud-platform - 使用新主机规则修补会删除 urlMaps API 中的旧主机规则集
- python - 是否有与 Unix '$' 等价的 python?命令?