2017-02-18 67 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