Javascript 当fs.readFile包含回调作为参数时,为什么它需要一个包装器?
我是Node.js的新手,与fs.readFile的交互令人困惑 起初,我认为我可以使用Javascript 当fs.readFile包含回调作为参数时,为什么它需要一个包装器?,javascript,node.js,asynchronous,callback,Javascript,Node.js,Asynchronous,Callback,我是Node.js的新手,与fs.readFile的交互令人困惑 起初,我认为我可以使用 fs.readFile("file.txt",function(err,data) { if(err) {throw err;} console.log(data); }); 但是,此打印为空。我咨询了,它给出了完全相同的例子,并声称它工作得很好 然后,我查阅了stack overflow,并在中发现了一个解决方案,即在您自己的函数中封装fs.readFile,该函数接受回调: funct
fs.readFile("file.txt",function(err,data) {
if(err) {throw err;}
console.log(data);
});
但是,此打印为空。我咨询了,它给出了完全相同的例子,并声称它工作得很好
然后,我查阅了stack overflow,并在中发现了一个解决方案,即在您自己的函数中封装fs.readFile,该函数接受回调:
function read(file,callback) {
fs.readFile("file.txt",function(err,data) {
if(err) {throw err;}
callback(data);
});
}
read(file, function(data) {
console.log(data);
});
或者,也可以将数据分配给新变量:
var content;
fs.readFile("file.txt",function(err,data) {
if(err) {throw err;}
content = data;
console.log(content);
});
我的理解是,当一个异步函数完成并返回文件内容中的某个值时,回调将在返回的数据上运行
如果fs.readFilefile,callback希望传递一个回调函数,那么为什么它似乎在fs.readFile完成之前运行回调呢
为什么将数据分配给另一个变量会改变它的行为方式
谢谢
fs.readFile("file.txt",function(err,data) {
if(err) {throw err;}
console.log(data);
});
实际上会起作用。
不起作用的是:
var content;
fs.readFile("file.txt",function(err,data) {
if(err) {throw err;}
content = data;
});
console.log(content);
你在文章中提到的例子是什么
原因是fs.readLine与您的代码是异步的,这意味着执行将立即进行,而无需等待fs.readLine的响应
所以在后一个例子中
console.log(content);
将在fs.readLine返回答案之前执行,即触发回调
通常,您不能运行异步方法并期望它们立即得到答案,异步的整个思想是它不会阻塞,在异步方法返回答案之前执行/程序会继续
异步方法中回调的全部目的是为该方法提供一种方法,使其在完成时通知您,并向您提供结果
包装fs.readLine并不能解决问题,它只是为读取文件提供了一个更干净的界面,而不是调用fs.readLine。您只需调用read即可。您的初始代码运行良好。假设您有var fs=requirefs;在它之前,在当前目录中有一个名为file.txt的文件,它可以工作。我只是再试一次,效果很好。我想知道是什么原因导致了我以前的错误。我想cleaner接口的目的是帮助避免我最初遇到的任何问题:。很好的解释。