如何在 Node.js 中使用 Promise 操作基于回调的 fs.writeFile() 方法?
fs.writeFile()是在 Node.js 的文件系统模块中定义的方法。文件系统模块基本上是与用户计算机的硬盘进行交互的。 fs.writeFile() 方法将数据异步写入文件,如果文件已存在则替换该文件。
fs.writeFile() 方法基于回调。使用回调方法导致回调嵌套或回调地狱问题的可能性很大。因此,为了避免这种情况,我们几乎总是喜欢使用基于 Promise 的方法。使用一些额外的 node.js 方法,我们可以以 promise 的方式操作基于回调的方法。
句法:
fs.writeFile(path, data, options)
注意:不需要回调,因为我们使用 Promise 操作该方法。
参数:接受三个参数路径、数据和选项。 options 是可选参数。
- path:它是一个String、Buffer或URL,它指定了要进行写操作的文件的路径。
- data:它是一个字符串 、Buffer 或 Uint8Array 实例的字符串。它将写入文件的数据。
- options:它是一个可选参数,以某种方式影响输出,因此我们是否将其提供给函数调用。
- encoding:它是一个指定编码技术的字符串,默认值为'utf8'。
- mode:它是一个整数值,指定文件模式。默认值为 0o666。
- flag:它是一个指定文件系统标志的字符串。默认值为“w”。
方法:基于回调的 fs.writeFile() 方法。要使用 Promise 操作它,首先,我们使用实用程序模块中定义的 promisify() 方法将其转换为基于 Promise 的方法。
示例 1:文件名:index.js
// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
// Convert callback based methods to
// promise based methods
const writeFile = util.promisify(fs.writeFile)
const readFile = util.promisify(fs.readFile)
// The readFile method read the contents of
// the file and returns the buffer form of
// the data
readFile('./testFile.txt')
.then(buff => {
const oldContent = buff.toString()
console.log(`\nOld content of the file
:\n${oldContent}`)
// The writeFile method write to the file
// If is already exist, replaces the file
return writeFile('./testFile.txt',
"Hey, I am newly added!")
})
.then(() => {
// Fetching contents of the file
// after write operation
return readFile('./testFile.txt')
})
.then(buff => {
const newContent = buff.toString()
console.log(`\nNew content of the
file :\n${newContent}`)
})
// If promise get rejected
.catch(err => {
console.log(`\nError Occurs,
Error code -> ${err.code},
Error NO -> ${err.errno}`)
})
使用 async-await 实现相同的功能。
// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
// Convert callback based methods to
// promise based methods
const writeFile = util.promisify(fs.writeFile)
const readFile = util.promisify(fs.readFile)
const writeFileContent = async (path, data) => {
// The readFile method read the contents
// of the file and returns the buffer
// form of the data
const oldBuff = await readFile(path)
const oldContent = oldBuff.toString()
console.log(`\nOld content of the
file :\n${oldContent}`)
// The writeFile method write to the file
// If is already exist, replaces the file
await writeFile(path, data)
// Fetching contentsof the file after
// write operation
const newBuff = await readFile(path)
const newContent = newBuff.toString()
console.log(`\nNew content of the
file :\n${newContent}`)
}
writeFileContent('./testFile.txt',
"Hey, I am newly added!")
// If promise get rejected
.catch(err => {
console.log(`\nError Occurs,
Error code -> ${err.code},
Error NO -> ${err.errno}`)
})
使用以下命令运行 index.js 文件:
node index.js
输出:
示例 2:当给定的文件路径不存在时。
文件名:index.js
// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
// convert callback based methods to
// promise based methods
const writeFile = util.promisify(fs.writeFile)
const readFile = util.promisify(fs.readFile)
// The writeFile method write to the file if
// the file does not exist, creates the file
// and then write to the file
writeFile('./testFile.txt',
"Hey there, I am newly added content of newly added file!")
.then(() => {
// The readFile method read the contents of the file
// and returns the buffer form of the data
// Fetching contents of the file after write operation
return readFile('./testFile.txt')
})
.then(buff => {
const content = buff.toString()
console.log(`\nContents of the file :\n${content}`)
})
// If promise get rejected
.catch(err => {
console.log(`\nError Occurs, Error code -> ${err.code},
Error NO -> ${err.errno}`);
})
使用 async-await 实现相同的功能。
// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
// Convert callback based methods to
// promise based methods
const writeFile = util.promisify(fs.writeFile)
const readFile = util.promisify(fs.readFile)
const writeFileContent = async (path, data) => {
// The writeFile method write to the file
// If the file does not exist, creates the
// file and then write to the file
writeFile(path, data)
// The readFile method read the contents of
// the file and returns the buffer form of
// the data
const buff = await readFile(path)
const content = buff.toString()
console.log(`\nContents of the file :\n${content}`)
}
writeFileContent('./testFile.txt',
"Hey there, I am newly added content of"
+ " newly added file!")
// If promise get rejected
.catch(err => {
console.log(`\nError Occurs,
Error code -> ${err.code},
Error NO -> ${err.errno}`);
});
使用以下命令运行 index.js 文件:
node index.js
运行程序前的目录结构:
运行程序后的目录结构:
输出: