Я пытаюсь выполнить команду оболочки, используя дочерний процесс в моем расширении vscode с помощью машинописного текста, но я не могу получить правильный порядок без использования функции задержки.
Я не хочу использовать жестко запрограммированную временную задержку, но хочу, чтобы она ждала, пока дочерний процесс не завершится, прежде чем возвращаться из функции. Есть ли способ изменить код для выполнения sh этого?
async function executeCommand(inCommand:string, inArgs:Array<string>)
{
var retBool = false;
console.log("Beginning of function");
// Initialize Child
const { spawn } = require('child_process');
const child = spawn(inCommand, inArgs);
// On receive of stdout
child.stdout.on('data', (data:any) =>
{
console.log("Child stdout: " + data);
});
// On receive of error
child.stderr.on('data', (data:any) =>
{
console.error("Child stderr: " + data);
});
// On exit
child.on('exit', function(code:any, signal:any)
{
// Only set to true if the child exited without any errors
if(code.toString() === "0") {
retBool = true;
}
console.log("Child process exited with: " + code + ", >" + signal+ "<");
});
await delay(1000); // <------------ How can I rearrange to get rid of this?
console.log("End of function");
return retBool;
}
function delay(ms: number) {
return new Promise( resolve => setTimeout(resolve, ms) );
}
// ------- In Main Function --------
var commandExecuteSuccess = false;
var prom = Promise.resolve(executeCommand('pwd', []));
prom.then(function(value)
{
commandExecuteSuccess = value;
});
await delay(2000); // <--------------------- And this one too
if(commandExecuteSuccess) {
console.log("Executed successfully");
} else {
console.error("There was an error");
}
Прямо сейчас, если я не использую задержки в консоли отладки, я получаю:
Начало функции
Конец функции
Произошла ошибка
вывод команды