Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Javascript 限制子进程并等待一个进程完成_Javascript_Node.js - Fatal编程技术网

Javascript 限制子进程并等待一个进程完成

Javascript 限制子进程并等待一个进程完成,javascript,node.js,Javascript,Node.js,我设置了一个GET路径,当到达该GET路径时,它将调用我控制器中的一个函数。这个函数的计算时间很长,所以我把它分成了两部分。如果不进行分岔,该过程大约需要15秒,如果客户端进行呼叫,则其他呼叫将被阻止15秒,直到完成,然后第一个呼叫的呼叫将得到帮助。长计算的最大数量不能超过3个叉。如果有3个以上的fork,我希望客户机等待fork完成 我已经测试了一个if语句,它允许用户睡眠,但是如果另一个调用在正确的时间出现,那么正在睡眠的用户必须等待更长的时间,我还设置了一个while循环,但最终内存耗尽。

我设置了一个GET路径,当到达该GET路径时,它将调用我控制器中的一个函数。这个函数的计算时间很长,所以我把它分成了两部分。如果不进行分岔,该过程大约需要15秒,如果客户端进行呼叫,则其他呼叫将被阻止15秒,直到完成,然后第一个呼叫的呼叫将得到帮助。长计算的最大数量不能超过3个叉。如果有3个以上的fork,我希望客户机等待fork完成

我已经测试了一个if语句,它允许用户睡眠,但是如果另一个调用在正确的时间出现,那么正在睡眠的用户必须等待更长的时间,我还设置了一个while循环,但最终内存耗尽。我就是不能把我的头绕过去。感谢您的帮助

  app.route('/calculation')
    .get(todoList.calculation);

一旦点击
while
循环,程序就会陷入无限循环。事件循环永远不会被预先设置,程序也永远不会有机会屈服于
分叉的
回调。一旦点击
while
循环,程序就会陷入无限循环。事件循环永远不会被预先设置,程序也永远不会有机会屈服于
分叉的
回调。
exports.calculation = [
  check('parameter')
    .isHexadecimal(),

    async function(req, res, next) { /* the rest of the existing function */ 
    const errors = validationResult(req)
    if (!errors.isEmpty()) {
      return res.status(422).json({ errors: errors.array() })
    }

  while(numRunning == 3){

  } 

  try {

    const forked = fork('server/forked-longComputation.js');
    ++numRunning;
    var test = req.query.calculation;

    forked.send(test);
    forked.on('message', (sum) => {
      console.log('sent sum to client');
      --numRunning;
      forked.kill();
      res.json(sum);
    });
  } catch (err) {
    --numRunning;
    console.log('Err');
    res.json({ error: err.message || err.toString() });
  }
}
];