如何在 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
输出: