📌  相关文章
📜  如何在 Node.js 中使用 Promise 操作基于回调的 fs.truncate() 方法?

📅  最后修改于: 2022-05-13 01:56:45.505000             🧑  作者: Mango

如何在 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

运行程序前的文件内容:

运行程序后的文件内容:

输出: