child_process.spawn никогда не запускает событие "close" - PullRequest
0 голосов
/ 28 июня 2019

Я использую child_process.spawn для восстановления mongodb из скрипта.Я запускаю этот процесс дважды параллельно с обещанием.В то время как первый успешно возвращается, второй просто застревает при создании вывода через stderr, этот код здесь никогда не срабатывает:

    spawnprocess.on('close', (code) => {
        if (code === 0) {
            console.log(`Log Test Database Setup: ${collection} successfully restored`);
            resolve();
        } else {
            reject('There was an error');
        }
    });

Это то, что возвращается, пока я не нажму CTRL + C:

Progress:  2019-06-27T21:19:43.962+0200 [########################]  DB.collection2 1.39MB/1.39MB  (100.0%)
Progress:  2019-06-27T21:19:46.962+0200 [########################]  DB.collection2  1.39MB/1.39MB  (100.0%)
Progress:  2019-06-27T21:19:49.962+0200 [########################]  DB.collection2  1.39MB/1.39MB  (100.0%)

Функция запуска восстановления

const restoreDB = function(drop, collection) {
    return new Promise((resolve, reject) => {
        console.log(`Log Test Database Setup: ${collection} restore started`);
        let spawnArguments = [
            `./dump/db/${collection}.bson`,
            '--host', 'localhost',
            '--port', portDev,
            '--db', dbNameDev
        ];

        if (drop) {
            spawnArguments.push('--drop');
        }

        const spawnprocess = spawn(mongorestorePath, spawnArguments,
            {shell: true}
        );

        spawnprocess.stderr.on('data', (data) => {
            console.log('Progress: ', data.toString('ascii'));
        });

        spawnprocess.on('close', (code) => {
            if (code === 0) {
                console.log(`Log Test Database Setup: ${collection} successfully restored`);
                resolve();
            } else {
                reject('There was an error');
            }
        });
    });   
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...