一旦 stdout 停止发出东西,如何 return 子进程

How to return the child process once the stdout stops emitting things

我必须使用 node 创建一个 tomcat 服务器,我知道,这有点奇怪,但它是为了学习目的。所以,基本上,我有使用 shelljs 生成服务器的函数:

function spawnTomCat() {
  return new Promise((resolve, reject) => {
    const child = shell.exec('create server', {
      async: true
    })

    child.stdout.on('data', data => {
      // this is called several times, and I want to resolve the promise in the last
      // call.
      if (lastCall()) {
        resolve(child)
      }
    })

    child.stderr.once('data', reject)
  })
}

基本上,因为它是服务器,所以永远不会调用 child.on('close'),如果我在第一次执行 child.stdout.on('data') 回调时调用 resolve 函数,服务器将启动。我可以粘贴我尝试过的东西,但其中 none 确实有效,但我尝试:

提前致谢。

好的,所以你想在服务器启动时解决 运行。我真的只有两种方法可以知道。

1.让服务器告诉你。 当服务器认为它已启动并且运行 并准备好接收请求时,服务器会将一些已知数据写入标准输出(或其他通信通道),以便你可以监视该通道并知道什么时候可以出发。

2。您轮询服务器。 您发送测试请求以了解它何时正确响应一些简单请求。

监视 stdout 数据暂停的计时器是一种 hack,并且有各种可能出错的机会。