fs.readFile回调函数中data参数的作用及必填原因是什么?
fs.readFile回调函数data参数说明
为什么需要data参数
首先要明确:data是fs.readFile异步回调函数的形参,不是你主动调用fs.readFile时传入的入参。
Node.js的异步I/O接口统一采用「错误优先」的回调设计:fs.readFile在后台异步完成文件读取操作后,会自动调用你传入的回调函数,并且按规则传入两个实参:
- 第一个是错误对象
err:读取失败时为包含错误信息的Error实例,读取成功时为null - 第二个就是读取结果
data:读取成功时承载文件内容,读取失败时为undefined
你在回调里声明data形参,就是为了接收fs模块返回的文件读取结果,如果你不声明这个参数,就拿不到读取到的文件内容。
data参数的具体作用
data的核心作用是承载读取到的文件原始内容,分为两种情况:
- 如果你调用
fs.readFile时没有指定编码格式(就像你给出的示例代码一样),data会是一个Buffer类型的对象,存储文件的二进制字节流,直接打印会输出类似<Buffer 48 65 6c 6c 6f 20 77 6f 72 6c 64>的格式 - 如果你传入了编码参数,比如
fs.readFile('./SampleFile.txt', 'utf8', function(err, data) {}),data会直接是解码后的字符串,可以直接作为文本处理
结合示例代码说明
你给出的示例代码如下:
const fs = require('fs'); fs.readFile('./SampleFile.txt', function read(err, data) { if (err) { throw err; } const content = data; console.log(content); });
对应执行逻辑:
- 代码读取
./SampleFile.txt文件完成后,fs模块自动把读取结果传给回调的data形参 - 代码把
data赋值给content变量之后,就可以对文件内容做任意后续处理,当前代码是直接打印原始Buffer内容 - 如果要输出可读的文本,只要把
console.log(content)改成console.log(content.toString())即可
内容的提问来源于stack exchange,提问作者Shaurya Singh
相关产品推荐
相关产品推荐

