一旦我调用函数node.js,主线程就会终止工作线程



我正试图让一个工作线程通过从Node服务器上的主线程接收数据来处理基于问题的游戏。然而,每次我在工作线程上调用函数时,它都会收到来自主线程的终止信号。

parentPort.on('message', (msg) =>{
HEADER = msg.HEAD;
console.log(msg);
//console.log(QuestionSet);
if (HEADER === HEADERSWORKER[0])
{
}
else if (HEADER === HEADERSWORKER[1])
{
}
else if (HEADER === HEADERSWORKER[2])
{
}
else if (HEADER === HEADERSWORKER[3])
{
QuestionSet = msg.DATA.QUESTIONS;
SessionID = msg.DATA.SESSIONID;
console.log(QuestionSet);
chooseQuestion();
//Start Game
}

只有当chooseQuestion((没有被注释掉时,终止才会发生,这让我相信这是我的问题。我可能错了,我只是想尽快拼凑一些东西来完成学业。谢谢你的帮助!

将我的评论转化为答案,因为它可以帮助您找到问题。

像这样的工作程序突然终止可能是因为工作程序中有某种未捕获的异常,但你并没有捕捉到它来记录它是什么。总是记录这些异常非常有用。在您的主程序中,它们通常会为您记录,但在工作者中并不总是如此。有两种方法可以确保此错误被记录下来,这样您就可以准确地看到它是什么。一种是您可能应该为所有员工使用的通用方法,另一种是针对出现问题的特定功能使用的特定方法。

以下是通用方法。创建工作线程时,请始终添加以下内容:

worker.on('error', err => {
console.log(err);
// do something else here like exit your program
});

这将为工作线程中任何未处理的致命错误提供控制台输出。


现在,在您的特定情况下,您知道问题是在调用chooseQuestion();时发生的,您也可以在其周围放置try/catch,这样您就可以捕获并记录错误:

parentPort.on('message', (msg) =>{
try {
HEADER = msg.HEAD;
console.log(msg);
//console.log(QuestionSet);
if (HEADER === HEADERSWORKER[0])
{
}
else if (HEADER === HEADERSWORKER[1])
{
}
else if (HEADER === HEADERSWORKER[2])
{
}
else if (HEADER === HEADERSWORKER[3])
{
QuestionSet = msg.DATA.QUESTIONS;
SessionID = msg.DATA.SESSIONID;
console.log(QuestionSet);
chooseQuestion();
//Start Game
}
} catch(e) {
console.log(e);
}
});

最新更新