最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Worker线程在我调用函数node.js后就被主线程终止

网站源码admin15浏览0评论

Worker线程在我调用函数node.js后就被主线程终止

Worker线程在我调用函数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
  }

仅在未注释choiceQuestion()时导致终止,这使我相信这是我的问题。我可能是错的,我只是想快速地拼凑一些东西以便在学校完成。感谢您的帮助!

回答如下:

将我的评论作为答案,因为它可以帮助您发现问题。

像这样的工作人员突然终止很可能是因为该工作人员中存在某种未捕获的异常,但是您并没有抓住它来记录它是什么。始终记录这些异常非常有用。在您的主程序中,它们通常会为您记录下来,但在工作人员中并非总是如此。您可以通过两种方法来确保记录此错误,以便您可以准确地了解它的含义。您可能应该对所有工作人员都使用的一种通用方法,对有问题的特定功能使用一种特定的方法。

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

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);
  }
});
发布评论

评论列表(0)

  1. 暂无评论