一旦 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 确实有效,但我尝试:
- 使用 exec - 永远不会触发回调
- 使用同步 - 将阻塞并且不会执行更多代码
提前致谢。
好的,所以你想在服务器启动时解决 运行。我真的只有两种方法可以知道。
1.让服务器告诉你。 当服务器认为它已启动并且运行 并准备好接收请求时,服务器会将一些已知数据写入标准输出(或其他通信通道),以便你可以监视该通道并知道什么时候可以出发。
2。您轮询服务器。 您发送测试请求以了解它何时正确响应一些简单请求。
监视 stdout 数据暂停的计时器是一种 hack,并且有各种可能出错的机会。
我必须使用 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 确实有效,但我尝试:
- 使用 exec - 永远不会触发回调
- 使用同步 - 将阻塞并且不会执行更多代码
提前致谢。
好的,所以你想在服务器启动时解决 运行。我真的只有两种方法可以知道。
1.让服务器告诉你。 当服务器认为它已启动并且运行 并准备好接收请求时,服务器会将一些已知数据写入标准输出(或其他通信通道),以便你可以监视该通道并知道什么时候可以出发。
2。您轮询服务器。 您发送测试请求以了解它何时正确响应一些简单请求。
监视 stdout 数据暂停的计时器是一种 hack,并且有各种可能出错的机会。