在process.on(stdout)和process.on(exit)之间的NodeJS子进程竞争条件

时间:2018-06-01 16:18:57

标签: node.js typescript selenium

我有一个应用程序(基本上)有父进程和子进程。子进程执行几个步骤(在这种情况下运行测试),并在测试步骤完成时写入STDOUT。这样,父进程将始终具有“最新”结果,因此如果子进程由于某种原因而过早退出,则父进程将知道完成的最后一步。

在子流程中

 Range("A4").NumberFormat = "@"
 Range("A4").Value = "123456789123"

在父流程中

console.log(doStep1());
console.log(doStep2());
console.log(doStep3());
process.exit();

我注意到的问题是,c.stdout.on("data", () => storeLatestResultsInVariable()) c.on("exit", () => indicateTestExitedAndAlertUserToLatestResults()); 回调是在最终onExit的{​​{1}}回调完成之前触发的。因此,在某些情况下,用户会收到storeLatestResultsInVariable()而不是console.log的结果的提醒。

这有点复杂,因为“步骤”都是异步的,doStep2在一个函数中调用,如果所有“步骤”都完成或“错误”,则运行,所以我需要使用doStep3以确保流程完全结束。

我的主要问题:在调用process.exit代码之前,有没有办法让Node等到process.exit函数完成?否则,是否有办法使用storeLatestResultsInAVariable()传回数据,以便我可以在c.on("exit", ...)回调中使用该数据?

非常感谢帮助,希望问题描述足够清楚!

0 个答案:

没有答案