我使用节点js每隔几秒就从观察者传递数据到函数streamplay,它在数组中存储id.ts文件名这很好,因为它存储但是当我从我的程序中的另一个函数回调时,我从这个数组得到未定义的值....我无法弄清楚它是如何写的:
var stream_play = [];
watch('/tmp/1_.m3u8', function(event, name) {
/* DEFINE - variables */
var ts = [];
ts.push(1);
streamplay(id, ts[ts.length-1]);
});
function streamplay(id, ts, callback) {
/* CHECH - ts */
if (ts !== 0) {
console.log('adding id..'+id+'...with ts...'+ts)
stream_play[id] = ts;
} else {
return callback(stream_play[id]);
}
}
从节点中的main函数调用,如下所示:
streamplay(stream, 0, function(response) {
console.log('streaming ts file...'+response+'...to client...')
res.write(fs.readFileSync('/tmp/'+response));
})
我明白了:
streaming ts file...undefined...to client...
答案 0 :(得分:3)
您的函数调用streamplay(stream, 0, function(response) {
将最终落入streamplay
中的其他条件。此行为return callback(stream_play[id]);
,stream_play
数组已初始化,但为空。访问JavaScript数组中不存在的元素将返回undefined
。
答案 1 :(得分:0)
我找到了解决方案和另一个问题......使用回调的第一个示例现在就像魅力一样。问题是我有主进程和工作进程,我在节点js站点上读到主和工作进程无法在变量值之间共享...所以新问题是如何共享主进程和工作进程变量以便我可以从master获取所有工作进程变量值?
我正在进行集群,因为我的服务器负载很大,必须要进行cpu集群。