2017-07-28 4 views
-1

スクリプト(ブロック1)を作成しましたが、配列にanythignをインポートできません。JavaScriptスクリプトのファイルコードがノード内のコマンドと異なる動作をする

var fs = require('fs'); 
var readline = require('readline'); 
var filename = process.argv[2];//filename 
var content = []; 
console.log(filename); 
readline.createInterface({ 
    input: fs.createReadStream(filename), 
    terminal: false 
}).on('line', function (line) { 
    content.push(line); 
}); 
console.log(content.length); 

ブロック2:(各ラインは入力順次)

fs = require('fs'); 

readline = require('readline'); 

filename = "filename.txt"; 

content = []; 

readline.createInterface({ 
    input: fs.createReadStream(filename), 
    terminal: false 
}).on('line', function (line) { 
    content.push(line); 
}); 

content; 
iはコードを取得し、行ずつ、それを実行する場合(ブロック2)コマンドラインノードには

ブロック1正常に動作します

ブロック1のconsole.log(filename)が正しい名前を出力しますが、console.log(content.length)は "0"を出力します。ノードREPLの内容には1700以上のエントリがあります。

私はLinux環境でノードv6.9.4を使用しており、同じコンピュータ上で両方のブロックを実行しています。 私はここに何かが欠けているのですか?

おかげ

+1

コンソールにstuffを入力するので、ファイル内の行のコードを実行するときに、非同期操作が完了するのに十分な時間が与えられます。 – James

答えて

1

あなたが使用するときに期待される出力を得ることができますcloseイベント

readline.createInterface({ 
    input: fs.createReadStream(filename), 
    terminal: false 
}).on('line', function (line) { 
    content.push(line); 
}).on('close', function(){ 
    console.log(content.length); 
}) 

ノード・シェルに入力して、あなたのファイルは、入力ストリームはあなたが入力するのにかかる期間で完了です次の行、したがってcontent.lengthが利用可能です。しかし、ブラウザメモリで実行されると、入力がインターフェイスによって読み込まれる前にエンジンがラインに到達します。

関連する問題