关于回调的过程的一个问题。。
发布于 12 年前 作者 cooldrine 4855 次预览 最后一次回复是 12 年前 来自
var fs = require (‘fs’);
fs.readFile (‘D:\a.txt’,‘utf8’, function (err,data) { if (err) throw err; console.log(data); })
这个过程应该是怎么样的啊? 我理解的是, 第一个地址传给readFile得到一个返回值a1,utf8再传给readFile,得到一个返回值a2,然后function作为回调函数传给readFile,function开始传递参数,返回值a1传给err,返回值a2传给data。如果地址出错,err里就是保存的错误信息,如果地址正确,err就是保存的a.txt里的内容。
我知道我的理解是错的。。但到底哪里有问题啊,按我的理解的话就算是把console.log(data);这句去掉,throw err还是可以正确打印出内容。。但事实上缺不是。。。求开导 = =
6 回复
首先代码标记下…
utf8, 回调函数, 三者一起传给fs.readFilereadFile存下回调函数(这个过程我也不清晰)… 然后调用 C++ 代码, 读取文件err和dataerr是如果有错误产生, 就会用err这个对象, 没有错误,err就是nulldata只有在正常没有出错时才有, 内容是文件字符串…throw和console.log是完全不一样的…我是这样理解的:fs可以调用运行时的参数,自己的属性和全局变量,job done后把job传回callback,callback爱怎么处理就咋处理
但问题就在这。。怎么保证err参数就一定接受的是出错时的错误信息呢?
@CooldrinE 底层调用代码是libuv实现的,它来保证。
@CooldrinE 好像也只能这么讲, 如果这都做不好, API 都没法保证了不是么
@jiyinyiyong 噢 明白了。。