我正在尝试产生子进程,并在Promise中产生结果。 子进程不能同时运行多次。返回连续运行的子进程的承诺
我在承诺中包装node.js的child_process.spawn()。 承诺在成功退出成功时履行,否则拒绝。 请求在不同时间com有时一个有时多个。我需要为每个请求执行相同的命令,甚至可以多次(使用不同或可能相同的选项)来完成请求。但是,如果并行运行,该命令将被锁定。所以如果不确定事先没有退出就不能运行。
也许我需要他们排队?
我无法把我的头围绕如何在JavaScript/Typescript中做到这一点。忙碌的等待显然不是上帝的主意,但我希望它能解释我想在这里做什么。
export class RunThingy{
private busy: boolean;
constructor() {
this.busy = false;
}
private run(options: string[]): Promise<string> {
return new Promise((resolve, reject) => {
let stdout: string = '';
let stderr: string = '';
while (!this.busy) { //Problem
this.busy = true;
let process: ChildProcess = spawn('processName', options);
process.stdout.on('data', (contents) => { stdout += contents; });
process.stderr.on('data', (contents) => { stderr += contents; });
process
.on('error', reject)
.on('close', function (code) {
if (code === 0) {
resolve(stdout);
} else {
reject(stderr);
}
this.buisy = false; //Problem
});
}
});
}
编辑:更名为command[]
到options[]
也许在promise中使用'.finally((=)this.buisy = false;)'? – Ioan
我不明白这可能会对此有所帮助。没有try catch块。你建议什么? –
'.finally'和'finally'不一样 –