首页 > 解决方案 > 一旦标准输出停止发出东西,如何返回子进程

问题描述

我必须使用节点创建一个 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')永远不会被调用,如果我resolve在第一次执行child.stdout.on('data')回调时调用该函数,服务器将启动。我可以粘贴我尝试过的东西,但它们都没有真正起作用,但我试图:

先感谢您。

标签: node.jschild-processspawn

解决方案


好的,所以您想在服务器启动并运行时进行解析。我真的只有两种方法可以知道这一点。

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

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

监视标准输出数据暂停的计时器是一种黑客行为,并且有各种出错的机会。


推荐阅读