2017-09-27 8 views
0

私はnode 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

「ストリーム再生」の配列が空のため – Maxim

答えて

3

関数呼び出しstreamplay(stream, 0, function(response) {は、streamplayのelse条件になります。この行はreturn callback(stream_play[id]);であり、stream_play配列は初期化されていますが空です。 JavaScript配列内に存在しない要素にアクセスすると、undefinedが返されます。

+0

はい、私はそれが空であることを知っていますが、値を返すように配列をグローバルに作成する方法は...変数を関数の外に置いてグローバルにしても配列はまだ空です。 – John

+0

次のように 'stream_play'を定義してください:' var stream_play = [0]; ' –

+0

var stream_play = [0];を追加しました。世界的にはそれはサム定義されていません – John

0

解決策と別の問題が見つかりました...コールバックを使用した最初の例は、現在charmのように動作しています。問題は、マスタープロセスとワーカープロセスがあり、ノードとjsサイトでマスターとワーカープロセスが変数値を共有できないということです。新しい質問はマスターとワーカープロセス変数を共有する方法ですマスターからのすべてのワーカープロセス変数値からのアクセス?

私は私の巨大なサーバーの負荷とCPUのクラスタリングのためにこれでクラスタリングを行う必要があります。

関連する問題