节点回调数组未定义(空值)

时间:2017-09-27 13:11:05

标签: javascript arrays node.js

我使用节点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...

2 个答案:

答案 0 :(得分:3)

您的函数调用streamplay(stream, 0, function(response) {将最终落入streamplay中的其他条件。此行为return callback(stream_play[id]);stream_play数组已初始化,但为空。访问JavaScript数组中不存在的元素将返回undefined

答案 1 :(得分:0)

我找到了解决方案和另一个问题......使用回调的第一个示例现在就像魅力一样。问题是我有主进程和工作进程,我在节点js站点上读到主和工作进程无法在变量值之间共享...所以新问题是如何共享主进程和工作进程变量以便我可以从master获取所有工作进程变量值?

我正在进行集群,因为我的服务器负载很大,必须要进行cpu集群。