原生文件系统模块的 promisify
扩展。
对于 require('fs')
模块的每一个有 fs.xxxSync
对应的 fs.xxx
方法,都生成一个 promisify
版本的 fs.xxxAsync
方法。
为方便某些使用场景,所有 fs.xxxSync
都可以通过 fs.sync.xxx
获取,所有 fs.xxxAsync
都可以通过 fs.async.xxx
获取。
-
对于返回多个成功回调参数的
fs.read
和fs.write
方法,其promisify
版仅保留其中的第一个(与fs.readSync
和fs.writeSync
一致)。
而在util.promisify
中,会将多个回调参数作为一个对象的多个属性返回;fs.promises
中目前尚未提供这两个方法。
注意:这并不意味着本模块今后默认对多成功返回参数的情况如此处理,而是考虑到fs.read
和fs.write
实际返回内容的必要性。 -
对于废弃的
fs.exists
方法,其promisify
版本fs.existsAsync
是基于fs.access
方法实现的。 而这是util.promisify
调用fs.exists
无法实现的,fs.promises
中则很可能永远不会提供这个方法。 -
另外,
fs.createReadStream
方法的promisify
版本fs.createReadStreamAsync
,是在ready
事件触发后,返回原始返回对象,并在其上增加了异步遍历器接口。
而fs.createWriteStream
方法的promisify
版本fs.createWriteStreamAsync
,是在ready
事件触发后,返回原始返回对象,并在其上增加了writeAsync
、endAsync
方法。
这两个方法无法通过util.promisify
直接实现,fs.promises
中应该也不会提供这种实现。 -
额外实现了
readUTF(path[,BOM],callback)
(BOM===null
时将自动剔除开头BOM
字符)、readJSON(path[,reviver],callback)
、writeJSON(path,data[,replacer[,space]],callback)
三个方法(均有fs.xxx
、fs.xxxAsync
、fs.xxxSync
三套)。
electron
环境下的 require('fs')
默认支持了将路径中的 .asar
文件作为文件夹访问的能力。
在 electron
环境中,本模块是基于 require('original-fs')
实现的(等价于原始 Node.js
环境下的 require('fs')
模块);
同时增加了一个属性 fs.asar
,用于存放 electron
扩展后的方法,它的值是以与本模块相同的形式构建的。
其它情况下,本模块是直接基于 require('fs')
实现扩展的,并且没有 fs.asar
属性。