CNode

关于回调的过程的一个问题。。

Ccooldrine发布于13 年前最后回复13 年前6 回复5019 浏览0 收藏

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
jiyinyiyong#1·13 年前

首先代码标记下...

  • 第一步: 文件名, utf8, 回调函数, 三者一起传给 fs.readFile
  • 第二步: readFile 存下回调函数(这个过程我也不清晰).. 然后调用 C++ 代码, 读取文件
  • 第三步: 文件读取完成, 调用存下来的回调函数, 传递两个参数进去 errdata

err 是如果有错误产生, 就会用 err 这个对象, 没有错误, err 就是 null data 只有在正常没有出错时才有, 内容是文件字符串..

throwconsole.log 是完全不一样的..

B
bigmusic#2·13 年前

我是这样理解的: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)
    }
}
参与回复
登录后即可参与回复。登录