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)
J
首先代码标记下...
- 第一步: 文件名,
utf8, 回调函数, 三者一起传给fs.readFile - 第二步:
readFile存下回调函数(这个过程我也不清晰).. 然后调用 C++ 代码, 读取文件 - 第三步: 文件读取完成, 调用存下来的回调函数, 传递两个参数进去
err和data
err 是如果有错误产生, 就会用 err 这个对象, 没有错误, err 就是 null
data 只有在正常没有出错时才有, 内容是文件字符串..
throw 和 console.log 是完全不一样的..
B
我是这样理解的:fs可以调用运行时的参数,自己的属性和全局变量,job done后把job传回callback,callback爱怎么处理就咋处理
fs={
someatt:something,
someatt:anotherthing,
readFile:function(filename,format,callback){
var something,err,getfile....etc
//do the job with global var or argument or fs.att
callback(err,getfile)
}
}
C
引用 jiyinyiyong首先代码标记下... 第一步: 文件名, utf8, 回调函数, 三者一起传给 fs.readFile 第二步: readFile 存下回调函数(这个过程我也不清晰).. 然后调用 C++ 代...
但问题就在这。。怎么保证err参数就一定接受的是出错时的错误信息呢?
J
引用 jiyinyiyong首先代码标记下... 第一步: 文件名, utf8, 回调函数, 三者一起传给 fs.readFile 第二步: readFile 存下回调函数(这个过程我也不清晰).. 然后调用 C++ 代...
@CooldrinE 底层调用代码是libuv实现的,它来保证。
J
引用 jiyinyiyong首先代码标记下... 第一步: 文件名, utf8, 回调函数, 三者一起传给 fs.readFile 第二步: readFile 存下回调函数(这个过程我也不清晰).. 然后调用 C++ 代...
@CooldrinE 好像也只能这么讲, 如果这都做不好, API 都没法保证了不是么
参与回复
登录后即可参与回复。登录