Я хотел бы создать массив, затем добавить к нему результат data
порожденного child_process
, затем использовать этот массив в обратном вызове child_process.stdout.on('end',...)
.
Первоначально я пытался это:
const { spawn } = require('child_process');
var proc = spawn('php',[APIFile, phpParams]);
var dataRet = [];
proc.stdout.on('data', (stdout) => {
dataRet.push(stdout);
});
proc.stdout.on('end', (stdout) => {
...
// Do something with dataRet
...
});
Это привело к ошибке, Cannot read property 'push' of undefined
.
Итак, я решил создать глобальную переменную, чтобы убедиться, что переменная будет доступна. Итак, я сделал это:
const { spawn } = require('child_process');
var proc = spawn('php',[APIFile, phpParams]);
dataCache[proc] = [];
proc.stdout.on('data', (stdout) => {
dataCache[proc].push(stdout);
});
proc.stdout.on('end', (stdout) => {
...
// Do something with dataCache[proc]
...
});
Сначала казалось, что он работает, затем я обнаружил, что иногда он вылетает, так же, как и раньше, с Cannot read property 'push' of undefined
.
Дополнительная информация
Итак, я вернулся к нему сегодня, и теперь он вылетает из-за другой ошибки.
const { spawn } = require('child_process');
var proc = spawn('php',[APIFile, phpParams]);
dataCache[proc] = [];
proc.stdout.on('data', (stdout) => {
dataCache[proc].push(stdout);
});
proc.stdout.on('end', (stdout) => {
...
var dataOut = dataCache[proc].join('');// It's crashing here
...
});
Как указано в комментариях, он вылетает из-за var dataOut = dataCache[proc].join('');
. Никакой код не изменился. Ошибка очень похожа, Cannot read property 'join' of undefined
.
Также какое-то время sh вообще не срабатывал. Так что это определенно очень непоследовательно.
Кроме того, я определяю dataCache
на ранней стадии скрипта, в глобальном пространстве имен, с простым объявлением, dataCache = {}