我正在嘗試產生子進程,並在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'不一樣 –