在編寫(xiě)使用 fs
模塊的 Node.js 腳本時(shí),我通常使用 util.promisify
方法來(lái)保證文件系統(tǒng)方法。基于 Promise 的方法允許使用 async/await
,這使得代碼更容易掌握和閱讀何缓。
從 Node.js 11 開(kāi)始棉饶,fs
模塊在 promises
屬性中提供了 promisified
方法垦页。
// 舊的方法使用 util.promisify
const { readFile } = require('fs')
const { promisify } = require('util')
const promisifiedReadFile = promisify(readFile)
promisifiedReadFile(__filename, { encoding: 'utf8' }).then((data) =>
console.log(data)
)
// 使用基于 promise 的 fs 的新方法
const { readFile } = require('fs').promises
readFile(__filename, { encoding: 'utf8' }).then((data) => console.log(data))
使用 promises
屬性紊册,您現(xiàn)在可以跳過(guò)將回調(diào)轉(zhuǎn)換為 promise 的步驟赋续,無(wú)需使用 util.promisify
男翰。這對(duì)于扁平化一些源代碼并使用 async/await
是個(gè)好消息!
fs/promises
從 Node.js 14 開(kāi)始可用
從 Node.js 14 開(kāi)始纽乱,fs
模塊提供了兩種使用基于 promises 的文件系統(tǒng)的方法蛾绎。這些 promises 可以通過(guò) require('fs').promises
或 require('fs/promises')
獲得。
// 從 Node.js v14 開(kāi)始:使用基于 Promise 的 fs 方法
const { readFile } = require('fs/promises')
readFile(__filename, { encoding: 'utf8' }).then((data) => console.log(data))
Node.js 的維護(hù)者們對(duì)于 /promises
路徑方式來(lái)公開(kāi)更多現(xiàn)有模塊的基于 promise 的方法表示贊成。
后面的 Node.js 版本也遵循了這種做法租冠。