首页 > 解决方案 > 无法从 node.js 中的 child_process 访问数组

问题描述

我想创建一个数组,然后使用 spawned 的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.

也有一段时间它根本没有崩溃。所以它肯定是非常不一致的。

另外,我确实dataCache在脚本的早期定义,在全局命名空间中,用一个简单的声明,dataCache = {}

标签: javascriptnode.jschild-process

解决方案


你在声明

let dataCache = []; 

第一的 ?

如果没有,您将收到上述错误。

无法读取未定义的属性“推送”

因为数组还没有定义。

所以先声明数组然后你可以做这样的事情

let dataCache = [];
const obj = {
  ["owl"] : "Are nice creatures"
}
dataCache.push(obj)
console.log(dataCache)

对于您的情况,它看起来像这样..

let dataCache = [];
proc.stdout.on("data", (stdout) => {
  const obj = {
    [proc]: stdout,
  };
  dataCache.push(obj);
});

推荐阅读