javascript - 无法从 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 = {}
解决方案
你在声明
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);
});
推荐阅读
- flask - 如何使按钮更改从我的views.py 传递到我的神社模板的变量?
- qt - QML Canvas 使用 QT_SCALE_FACTOR 设置不正确地呈现
- typescript - 使用带有 typescript 的 createContext 和 useReducer 时无法将对象状态和分派传递给提供者
- r - 使用 dplyr 改变一个新列,其值基于多个条件
- opencv - Flask OpenCV 将视频流发送到外部 HTML 页面
- visual-studio - 键入后 Visual Studio 崩溃
- r - R-以下错误:返回的 API:请求的身份验证范围不足
- javascript - Javascript:卡在两个皇后的对角线验证以及它们是否可以互相攻击
- vue.js - 如何从动态填充的选择框中侦听初始更改事件
- dhcp - LXD DHCP 分发 IP 地址