我必须使用节点创建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
函数,则服务器将启动。我可以粘贴我尝试过的东西,但它们都没有真正起作用,但是我尝试了:
- 使用exec-不会被解雇
- 使用Sync-将阻止和进一步的代码执行
预先感谢您。
好的,因此您想在服务器启动和运行时解决。我实际上只有两种方法可以想到这一点。
1。让服务器告诉您。服务器在服务器认为它已经启动并运行并准备好请求时,将一些已知数据写入STDOUT(或其他通信频道(去。
2。您要对服务器进行轮询。您发送测试请求以找出何时正确响应某些简单请求。
计时器观察stdout数据中的暂停是一种黑客攻击,并且会受到各种错误的机会。