Дождитесь завершения всех дочерних процессов, чтобы продолжить

#node.js #asynchronous #child-process

#node.js #асинхронный #дочерний процесс

Вопрос:

Я хотел бы знать, возможно ли дождаться завершения всех дочерних процессов, созданных с помощью spawn функции, прежде чем продолжить выполнение.

У меня есть код, который выглядит следующим образом:

 
    const spawn = window.require('child_process').spawn;

    let processes = [];
    let thing = [];
    // paths.length = 2
    paths.forEach((path) => {
        const pythonProcess = spawn("public/savefile.py", ['-d', '-j', '-p', path, tempfile]);

        pythonProcess.on('exit', () => {
            fs.readFile(tempfile, 'utf8', (err, data) => {
                thing.push(...)
            });
        });

        processes.push(pythonProcess);
    });

    console.log(processes) // Here we have 2 child processes
    console.log(thing) // empty array.. the python processes didnt finish yet

    return thing // of course it doesn't work. I want to wait for all the processes  to have finished their callbacks to continue
  

Как вы можете догадаться, я хотел бы знать, как я мог бы запустить все скрипты python одновременно и дождаться их завершения, чтобы продолжить мой js-код.

Я запускаю узел 10.15.3

Спасибо

Ответ №1:

ForEach для отправки Promise в массив Promise и Promise.all()

Ответ №2:

Вы пробовали spawnSync ?

Обычно идентично spawn, за исключением того, что функция не вернется, пока дочерний процесс не будет полностью закрыт.

 import { spawnSync } from "child_process";
spawnSync('ls', ['-la']);