2017-02-18 12 views
0

エラーは発生せず、ファイルデータを印刷できますが、input_1はループ全体でtrueに変更されていないようです。したがって、私はxの無限の一連の「y」を印刷しません。 whileループはinput_1変数が変更されるまで待つ必要があり、私は約束を使用したくありません。whileループ(nodejs)で変数が更新されない

var fs = require("fs"); 
var input_1 = false; 
var input_2 = false; 

fs.readFile('input.txt', function(err, data){ 

    if (err) {return console.log(err);}; 
    console.log(data.toString()); 
    input_1 = true; 

}) 

fs.readFile('input2.txt', function(err, data){ 
    if (err) {return console.log(err);}; 
    console.log(data.toString()); 
    input_2 = true; 

}) 

while(!input_1){ 
    console.log('x') 
} 

console.log('y') 
+3

JavaScriptはシングルスレッドです。無限ループを作れば、他に何も起こりません。 – 4castle

+0

readFileは非同期関数です。この事実をサポートするコードを変更するか、readFileSyncに変更する必要があります。 –

+0

2つの読み込みファイル操作が非同期のままで、最初のファイルが正常に読み込まれると、input_1の値がtrueに変わります。実行されると、whileループが終了するはずです。それはなぜそうしていないのですか? whileループではなくsetTimeoutを実行してinput_1の値をチェックすると、trueに更新されます。 – user3308138

答えて

0

私はこの状況で間違っている可能性がありますが、現時点では私のように見えるものは非同期の問題です。私は完全にnodeJSのreadFile関数に精通していませんが、あなたがする必要があるかもしれないことは、ファイル読者または彼らのコールバックからの約束です。

根本的な問題は、コールバックがテスト中の変数の値を変更する前にwhileループが実行されていることです。

+0

はい、whileループは、成功したときにコールバックが実行され、input_1の値がtrueに変化した後、input_1の変更を検出しませんか? – user3308138

関連する問題