2017-02-18 66 views
0

尽管我没有得到任何错误并且我能够打印文件数据,但input_1在整个循环中似乎没有更改为true。因此,我不打印'y',只是无尽的一系列x。我希望while循环等到input_1变量发生变化,我不想使用promise。变量在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

这个想法是,两个读取文件操作保持异步,并且当成功读取第一个文件时,input_1的值将更改为true。当它发生时,while循环应该退出。为什么不这样做?如果我执行setTimeout而不是while循环并检查input_1的值,它将更新为true。 – user3308138

回答

0

我可能在这种情况下是错的,但它在目前看起来像是一个异步问题。我并不完全熟悉nodeJS中的readFile函数,但您可能需要做的是链接文件读取器或其回调中的承诺。

我认为潜在的问题是while循环在回调之前正在更改已经测试的变量的值。

+0

是的,但是在成功执行回调并且input_1的值更改为true后,while循环是否应该检测到input_1中的更改​​? – user3308138