Javascript 变量未在while循环(nodejs)中更新

Javascript 变量未在while循环(nodejs)中更新,javascript,node.js,callback,Javascript,Node.js,Callback,即使我没有收到任何错误并且能够打印文件数据,但在整个循环中,输入_1似乎没有变为true。因此,我不打印“y”,只打印一系列无休止的x。我希望while循环等待输入_1变量更改,我不想使用承诺 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);}

即使我没有收到任何错误并且能够打印文件数据,但在整个循环中,输入_1似乎没有变为true。因此,我不打印“y”,只打印一系列无休止的x。我希望while循环等待输入_1变量更改,我不想使用承诺

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')

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


我认为根本的问题是,while循环是在回调更改您所测试的变量的值之前运行的。

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


我认为最根本的问题是,while循环是在回调更改测试变量的值之前运行的。

JavaScript是单线程的。如果进行无限循环,则不会发生其他任何事情。readFile是一个异步函数。您需要更改代码以支持这一事实,或者更改为ReadFileSynct这一想法是两个读取文件操作保持异步,并且当成功读取第一个文件时,输入值_1将更改为true。当它这样做时,while循环应该退出。为什么不这样做?如果我执行setTimeout而不是while循环并检查输入_1的值,它将更新为true。JavaScript是单线程的。如果进行无限循环,则不会发生其他任何事情。readFile是一个异步函数。您需要更改代码以支持这一事实,或者更改为ReadFileSynct这一想法是两个读取文件操作保持异步,并且当成功读取第一个文件时,输入值_1将更改为true。当它这样做时,while循环应该退出。为什么不这样做?如果我执行setTimeout而不是while循环并检查输入_1的值,它已更新为true。是的,但在成功执行回调且输入值更改为true后,while循环不应该检测到输入值的更改吗?是的,但在成功执行回调且输入值更改为true后,while循环不应该检测到输入值的更改吗?