访问readFile中的外部范围变量

时间:2016-08-29 19:06:26

标签: node.js asynchronous readfile

我是异步编程的新手。最近我发现了一个我不太懂的案例。对于这个例子:

var username = "abc";
fs.readFile(filePath, { encoding: 'utf-8' }, function (err, oldUsername) {
    console.log(username); // Print xyz
    if (username == oldUsername) 
        // do something, since username is now 'xyz', result failed!
});
username = "xyz";

我想将文件中的 oldUsername 用户名(abc)进行比较,但控制台打印" xyz"所以结果失败了。

如何获取用户名的未修改值?

1 个答案:

答案 0 :(得分:0)

你必须记住,该回调函数中的所有代码,直到该代码中的其他所有内容运行后才会实际运行。

你只是在那里定义函数,而不是执行它。你把它作为一个参数传递给另一个函数(readFile),这样只要用它完成异步i / o就会调用它。

我想这有点像在信封上寄回地址,直到信封上的主要地址被处理后才重要。

所以你最终在那里分配了一个不同的值,在console.log被执行之前。

有更多信息,例如:

  

事件循环模型的一个非常有趣的属性是,与许多其他语言不同,JavaScript永远不会阻塞。处理I / O通常通过事件和回调来执行,因此当应用程序等待返回IndexedDB查询或返回XHR请求时,它仍然可以处理其他事情,如用户输入。 [1]

祝你好运! :)