2017-02-18 4 views
0

Несмотря на то, что у меня нет ошибок, и я могу распечатать данные файла, input_1, похоже, не изменяется на true во всем цикле. Поэтому я не печатаю 'y', а просто бесконечную серию x. Я хочу, чтобы цикл while ожидал изменения переменной input_1, и я не хочу использовать обещания.переменная не обновляется во время цикла (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

Я мог ошибаться в этой ситуации, но то, что мне кажется в данный момент, является асинхронной проблемой. Я не полностью знаком с функцией readFile в nodeJS, но то, что вам может понадобиться, - это сцепить обещание от читателей файлов или их обратного вызова.

Основная проблема, по-моему, заключается в том, что цикл while выполняется до того, как обратный вызов изменит значения переменных, в которых вы тестировали.

+0

да, но не должен ли цикл while обнаруживать изменение в input_1 после того, как обратный вызов будет выполнен после успеха, а значение input_1 изменится на true? – user3308138

Смежные вопросы