Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何停止Node.js中的异步线程_Node.js_Express_Asynchronous - Fatal编程技术网

如何停止Node.js中的异步线程

如何停止Node.js中的异步线程,node.js,express,asynchronous,Node.js,Express,Asynchronous,我需要一个巨大的帮助或建议,请。我需要强调Node.js服务器——只是CPU高——因为我需要测试市场的监控工具

我需要一个巨大的帮助或建议,请。我需要强调Node.js服务器——只是CPU高——因为我需要测试市场的监控工具 我尝试使用Loadtest,但当它启动时,它并没有以编程方式停止,只有在我手动关闭它的情况下(如果有人对此有任何建议,请!)。然后我试着做了一个简单的while循环,因为我想我可以阻止它,但是没有成功

var shouldRun = true;

app.get("/cpuup", (req, res) => {
  var result = 0;
  while (shouldRun) {
    result += Math.random() * Math.random();
  }
  return result;
});

app.get("/cpudown", (req, res) => {
  shouldRun = false;
});
有没有人能给我一些其他方法的建议,或者我不能停止一个异步线程?
谢谢

Synchronous
循环阻塞时,
shouldRun=false
将永远无法到达

在像web服务器这样需要并发性的应用程序中,应该避免阻塞操作

依赖全局标志变量是有问题的,但这可以通过使用
async
循环来解决。路由处理程序不应该返回任何内容,如果需要,返回的值应该作为响应发送

如中所述,Express Middleware和route处理程序应处理承诺拒绝以提供正确的错误处理,在使用
async
函数的情况下,这需要
try..catch

app.get("/cpuup", async (req, res, next) => {
  try {
    var result = 0;
    while (shouldRun) {
      result += Math.random() * Math.random();
      await null; // a delay
    }
    res.send('' + result);
  } catch (err) {
    next(error);
  }
});

无法停止此代码,因为它是的一部分。这不是对您问题的直接回答,但观看此视频应有助于对您的应用程序中发生的事情有更多的基本了解。@romellem谢谢!:)如果你否决了一个正确的答案,一件好事就是提供一个如何改进的评论。我不能否决。此外,这不是正确的答案。我问了如何停止异步线程。@barbs它解释了如何停止异步线程。OP中列出的一个it正在阻止,无法从另一个请求中停止。