脚本中和在解释器中使用 fs.readFile() 得到不同的结果
因为完全没理解 回调函数
的概念,所以我写了以下的代码
(function() {
var fs = require('fs');
var callback = (function() {
str = '';
return function(err, contents) {
if (contents !== undefined) {
str += contents;
}
return str;
};
})();
fs.readFile(process.argv[2], 'utf8', callback);
var lines = callback().split('\n').length - 1;
console.log(lines);
})();
不知为何,在解释器里直接运行则没问题,可是保存为脚本运行时,lines 就只能为 0 了,这是为什么呢?谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
试下:
因为当保存为文件的时候,这里就用到了fs.readFile ,而nodejs是
异步非阻塞
的.它会先执行后面的代码,当文件读取完之后再执行callback中的方法,所以fs.readFile还没有执行完,就执行了后面来计算行数,当然为0了。
你可以在callback 中
console.log('hello')
,看看执行顺序就知道了!tips:你用
callback()
想要来获取str也不对吧,连参数都没有哦~因此由于nodejs的异步非阻塞,当你需要获取
fs.readFile
等类似的函数执行的结果的时候,就需要将处理结果的代码卸载callback中,否则代码的执行结果往往会令人匪夷所思。当有大量的这样的需求的时候就会出现callback的循环嵌套了,最后的代码就会很难维护,所以就需要借助一个模块来进行流程控制了,我用的是
async
。对node并不是特别的了解, 但是
callback
是readFile
结束之后去调用的, 所以在callback
方法里面拿到的才是正确的数据打个比方, 就好像
上面的红字部分, 就是
回调函数
体现在代码上, 大概是这样