如何在 Node.js 中使用 Promise 操作基于回调的 fs.truncate() 方法?
Node.js 的文件系统模块中定义的fs.truncate()方法。文件系统模块基本上是与用户计算机的硬盘进行交互的。 truncate() 方法用于将文件的内部内容修改 'len' 字节。如果 len 比文件的当前长度短,则文件被截断为 len 的长度,如果大于文件长度,则通过附加空字节 (x00) 来填充,直到达到 len。
fs.truncate() 方法基于回调。使用回调方法导致回调嵌套或回调地狱问题的可能性很大。因此,为了避免这种情况,我们几乎总是喜欢使用基于 Promise 的方法。使用一些额外的 node.js 方法,我们可以以 promise 的方式操作基于回调的方法。
句法:
fs.truncate(path, len)
注意:不需要回调,因为我们使用 Promise 操作该方法。
参数:此方法接受上面提到的两个参数,如下所述:
- path:它是一个String、Buffer或Url,指定目标文件的路径。
- len:它是一个数值,指定要截断的文件的长度。它是一个可选参数,默认值为 0,即如果没有提供 len 参数,它将截断整个文件。
返回值:如果方法使用 Promise 操作,则返回一个 Promise,成功时将在没有参数的情况下解决该 Promise,如果出现问题,则以错误对象拒绝(例如,给定路径是目录的路径或给定路径不存在)。
方法:基于回调的 fs.truncate() 方法。要使用 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 trunct = util.promisify(fs.truncate)
// The truncate operation
trunct('./testFile.txt')
// If file is successfully truncated
.then(() => {
console.log('File contents are deleted!')
})
// If any error occurs
.catch(err => {
console.log(`Error 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 trunct = util.promisify(fs.truncate)
const truncateFile = async (path) => {
// The truncate operation
await trunct(path)
console.log('File contents are deleted!')
}
truncateFile('./testFile.txt')
// If any error occurs
.catch(err => {
console.log(`Error Occurs,
Error code -> ${err.code},
Error NO -> ${err.errno}`);
});
运行程序前的文件内容:
运行程序后的文件内容:
使用以下命令运行 index.js 文件:
node index.js
输出:
File contents are deleted!
示例 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 trunct = util.promisify(fs.truncate)
const readFileContent = util.promisify(fs.readFile)
// Fetching contents before truncate
readFileContent('./testFile.txt')
.then(buff => {
const oldContents = buff.toString()
console.log(`\nContents before
truncate : \n${oldContents}`)
// The truncate operation
return trunct('./testFile.txt', 18)
})
// If file is successfully truncated
.then(() => {
console.log('\nTruncate done!\n')
// Fetching contents after truncate
return readFileContent('./testFile.txt')
})
.then(buff => {
const newContents = buff.toString()
console.log(`Contents after
truncate : \n${newContents}`)
})
// If any error occurs
.catch(err => {
console.log(`Error 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 trunct = util.promisify(fs.truncate)
const readFileContent = util.promisify(fs.readFile)
// Function to fetch file contents
const fetchFileContents = async (path) => {
const buff = await readFileContent(path)
return buff.toString()
}
// Function to truncate
const truncateFile = async (path, len) => {
// Fetching contents before truncate
const oldContents = await fetchFileContents(path)
console.log(`\nContents before
truncate : \n${oldContents}`)
// The truncate operation
const buff = await trunct(path, len)
console.log('\nTruncate done!\n')
// Fetching contents before truncate
const newContents = await fetchFileContents(path)
console.log(`Contents after
truncate : \n${newContents}`)
}
truncateFile('./testFile.txt', 18)
// If any error occurs
.catch(err => {
console.log(`Error Occurs,
Error code -> ${err.code},
Error NO -> ${err.errno}`);
})
使用以下命令运行 index.js 文件:
node index.js
运行程序前的文件内容:
运行程序后的文件内容:
输出: