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

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

如何在 Node.js 中使用 Promise 操作基于回调的 fs.lstat() 方法?

fs.lstat()方法在 Node.js 的文件系统模块中定义。文件系统模块基本上是与用户计算机的硬盘进行交互的。 lstat() 方法使用在 stats 对象上定义的方法(由 lstat 提供的数据)提供一些特定于文件和文件夹的信息。
fs.lstat() 方法基于回调。使用回调方法导致回调嵌套或回调地狱问题的可能性很大。因此,为了避免这种情况,我们几乎总是喜欢使用基于 Promise 的方法。使用一些额外的 node.js 方法,我们可以以 promise 的方式操作基于回调的方法。
句法:

fs.lstat(path, options)

注意:不需要回调,因为我们使用 Promise 操作该方法。
参数:此方法接受上面提到的两个参数,如下所述:

  • path:它是一个字符串、缓冲区或 url,它指定目录的路径,我们尝试读取其内容。
  • options:它是一个可选参数。一个选项参数是“bigint”,它是一个布尔值。这里我们指定 fs.lstat() 返回的 stats 对象中的数值是否为 bigint(默认值-false)。

返回值:如果方法使用 Promise 操作,则返回已解决或拒绝的 Promise。如果目录被成功读取,则 Promise 使用 stats 对象解决,否则如果发生任何错误(示例指定的目录不存在或没有读取文件的权限等),则使用错误对象拒绝。
从已解决的 Promise 返回的 stats 对象中定义了一些属性和方法,这有助于获取有关目标文件或文件夹的一些特定详细信息。下面指定了一些方法。

  • stats.isDirectory():如果 stats 对象描述了一个文件系统目录,则返回 true。
  • stats.isFile():如果 stats 对象描述的是常规文件,则返回 true。
  • stats.isSocket():如果 stats 对象描述了一个套接字,则返回 true。
  • stats.isSymbolicLink():如果 stats 对象描述了符号链接,则返回 true。
  • stats.isFile():如果 stats 对象描述的是常规文件,则返回 true。
  • stats.isFIFO():如果 stats 对象描述了先进先出管道,则返回 true。
  • stats.size:它以字节为单位指定文件的大小。
  • stats.blocks:它指定为文件分配的块数。

示例 1:文件名:index.js

javascript
// Program to identify files and folders
// of a directory
 
// Importing File System and Utilities module
const fs = require('fs')
const util = require('util')
 
// Convert callback based methods to
// promise based methods
const readDir = util.promisify(fs.readdir)
const lStat = util.promisify(fs.lstat)
 
 
const fileOrFolder = async (path) => {
    const filenames = await readDir(path)
 
    for (let filename of filenames) {
 
        // Calling lstat method to give the
        // stats object for every directory
        const stats = await lStat(filename)
 
        // Check file or folder
        if (stats.isFile()) {
            console.log(
            `${filename} ---------> File`)
        } else {
            console.log(
            `${filename} ---------> Folder`)
        }
    }
}
 
// Driver code
// The process.cwd() gives current
// working directory
fileOrFolder(process.cwd())
 
    // If promise is rejected
    .catch(err => {
        console.log(`Error occurs,
        Error code -> ${err.code},
        Error No -> ${err.errno} `);
    });


javascript
// Program to count the size of
// directories in bytes
 
// Importing File System and
// Utilities module
const fs = require('fs')
const util = require('util')
 
// Convert callback based methods to
// promise based methods
const readDir = util.promisify(fs.readdir)
const lStat = util.promisify(fs.lstat)
 
const sizeOfDirectories = async (path) => {
    const filenames = await readDir(path)
    for (let filename of filenames) {
 
        // Calling lstat method to give the
        // stats object for every directory
        const stats = await lStat(filename)
 
        // Print size of each directory
        console.log(`${filename}
          --------> ${stats.size} bytes`)
    }
}
 
// Driver code
// The process.cwd() gives current
// working directory
sizeOfDirectories(process.cwd())
    // If promise is rejected
    .catch(err => {
        console.log(`Error occurs,
        Error code -> ${err.code},
        Error No -> ${err.errno}`);
    })


使用以下命令运行index.js文件:

node index.js

输出:

示例 2:文件名:index.js

javascript

// Program to count the size of
// directories in bytes
 
// Importing File System and
// Utilities module
const fs = require('fs')
const util = require('util')
 
// Convert callback based methods to
// promise based methods
const readDir = util.promisify(fs.readdir)
const lStat = util.promisify(fs.lstat)
 
const sizeOfDirectories = async (path) => {
    const filenames = await readDir(path)
    for (let filename of filenames) {
 
        // Calling lstat method to give the
        // stats object for every directory
        const stats = await lStat(filename)
 
        // Print size of each directory
        console.log(`${filename}
          --------> ${stats.size} bytes`)
    }
}
 
// Driver code
// The process.cwd() gives current
// working directory
sizeOfDirectories(process.cwd())
    // If promise is rejected
    .catch(err => {
        console.log(`Error occurs,
        Error code -> ${err.code},
        Error No -> ${err.errno}`);
    })

使用以下命令运行index.js文件:

node index.js

输出: