无法从node.js中的child_process访问数组

JVE999

我想创建一个数组,然后使用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 = {}

JVE999

我找到了答案,尽管我不知道为什么最初的尝试不起作用。因为我在同一脚本中多次使用了此模式,所以我决定压缩它,以便可以更轻松地对其进行处理,并且仅靠它进行修复。

因此,我要做的是创建一个运行child_process的特殊函数,并将所有内容合并为一个函数,如下所示:

function runPHPProcess(APIFile,phpParams,callbackFinished,callbackError,callbackClose){
  var proc = spawn('php',[APIFile, phpParams]);
  var retData = [];
  proc.stdout.on('data', (stdout) => {
    retData.push(stdout);
  });
  proc.stdout.on('end', () => {
    var stdout = retData.join('');
    callbackFinished(stdout);
  });
  proc.stderr.on('data', (data) => {
    if(typeof callbackError != "undefined")
      callbackError(data);
    console.error("there was an error: "+data.toString('utf8'));
  });
  proc.on('close', (code) => {
    if(typeof callbackClose != "undefined")
      callbackClose(data);
    console.log(`child process exited with code ${code}`);
  });
}

然后,我替换了之前的代码,即

    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
      ...
    });

与:

runPHPProcess(APIFile,phpParams,function(stdout){...});

由于某些原因,它起作用。我想由于某种原因,我的变量在被使用之前就被某种异步删除功能删除了。可能需要注意的是,所有代码(dataCache变量声明和除外const { spawn } = require('child_process');)都在的内部socket.on('join',function(data){...});,这可能与变量不一致有关,有时在使用变量之前会消失。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node js Google App Engine 中的 child_process

来自分类Dev

Node.js child_process TypeError:无法读取未定义的属性“_writableState”

来自分类Dev

我应该如何使用 child_process 模块在 linux 中通信 python 和 node.js?

来自分类Dev

Webpack和TypeScript:无法解析node.d.ts中的模块“ child_process”

来自分类Dev

在Gulp中,child_process无法执行上一步生成的JS程序

来自分类Dev

如何模拟Node.js child_process生成函数?

来自分类Dev

Node.js child_process exec的标准输出被缩短

来自分类Dev

在node.js安全/转义中生成child_process

来自分类Dev

Node.js插件与child_process的优点

来自分类Dev

使用node.js child_process调用python脚本

来自分类Dev

Node.js child_process exec的标准输出被缩短

来自分类Dev

在node.js安全/转义中生成child_process

来自分类Dev

使用node.js child_process调用python脚本

来自分类Dev

等待child_process退出node.js的替代方法

来自分类Dev

node.js child_process 生成忽略等号

来自分类Dev

当child_process中的exec shell时,child_process中的stdout无法在stdin之前输出右行

来自分类Dev

如何构建docker以从Google App Engine中的Node.js child_process运行Python3?

来自分类Dev

如何在node.js child_process exec命令中使用“&”?

来自分类Dev

如何刷新Node.js child_process stdin.write

来自分类Dev

通过Node.js child_process关闭CS:GO专用服务器

来自分类Dev

Node.js child_process生成自定义stdio

来自分类Dev

如何获取Node.JS中生成的child_process的输出?

来自分类Dev

使用child_process(node js)在后台运行python脚本

来自分类Dev

无法在Node js中连接

来自分类Dev

无法在Windows上写入生成的child_process的stdin

来自分类Dev

无法从功能node.js访问值

来自分类Dev

玉环无法访问node.js文件中的变量

来自分类Dev

无法在Node.js / Express中访问请求正文数据

来自分类Dev

如何使用child_process.exec访问node.js子进程中的命令行参数?

Related 相关文章

  1. 1

    Node js Google App Engine 中的 child_process

  2. 2

    Node.js child_process TypeError:无法读取未定义的属性“_writableState”

  3. 3

    我应该如何使用 child_process 模块在 linux 中通信 python 和 node.js?

  4. 4

    Webpack和TypeScript:无法解析node.d.ts中的模块“ child_process”

  5. 5

    在Gulp中,child_process无法执行上一步生成的JS程序

  6. 6

    如何模拟Node.js child_process生成函数?

  7. 7

    Node.js child_process exec的标准输出被缩短

  8. 8

    在node.js安全/转义中生成child_process

  9. 9

    Node.js插件与child_process的优点

  10. 10

    使用node.js child_process调用python脚本

  11. 11

    Node.js child_process exec的标准输出被缩短

  12. 12

    在node.js安全/转义中生成child_process

  13. 13

    使用node.js child_process调用python脚本

  14. 14

    等待child_process退出node.js的替代方法

  15. 15

    node.js child_process 生成忽略等号

  16. 16

    当child_process中的exec shell时,child_process中的stdout无法在stdin之前输出右行

  17. 17

    如何构建docker以从Google App Engine中的Node.js child_process运行Python3?

  18. 18

    如何在node.js child_process exec命令中使用“&”?

  19. 19

    如何刷新Node.js child_process stdin.write

  20. 20

    通过Node.js child_process关闭CS:GO专用服务器

  21. 21

    Node.js child_process生成自定义stdio

  22. 22

    如何获取Node.JS中生成的child_process的输出?

  23. 23

    使用child_process(node js)在后台运行python脚本

  24. 24

    无法在Node js中连接

  25. 25

    无法在Windows上写入生成的child_process的stdin

  26. 26

    无法从功能node.js访问值

  27. 27

    玉环无法访问node.js文件中的变量

  28. 28

    无法在Node.js / Express中访问请求正文数据

  29. 29

    如何使用child_process.exec访问node.js子进程中的命令行参数?

热门标签

归档