当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js fsPromises.opendir()用法及代码示例


fsPromises.opendir()方法在Node.js的文件系统模块中定义。文件系统模块本质上是用于与用户计算机的硬盘进行交互的。该方法用于异步打开目录。

fsPromise.opendir()方法返回已解决或被拒绝的诺言,因此避免了fs.opendir()中可能发生的回调嵌套或回调地狱问题。承诺通过“ fs.Dir”对象解析,该对象本身包含其他用于访问和关闭目录的函数。如果诺言被拒绝,它将被错误对象拒绝。

用法:

fs.promises.opendir(path, options)

参数:该方法接受上述和以下所述的两个参数:

  • path:它是一个String,Buffer或Url,它指定必须打开的目录的路径。
  • options:它是一个可选参数,它会以某种方式影响输出,因此会相应地将其提供给函数调用。
    • encoding:它指定了编码技术,默认为“ UTF8”
    • bufferSize:它是一个数字,指定当从目录读取时在内部缓冲的目录条目的数量。 bufferSize的值较高,可以确保良好的性能,但会导致更多的内存使用。

返回值:该方法返回一个用“ fs.Dir”对象解析的promise,该对象本身包含其他用于访问和关闭目录的函数。如果诺言被拒绝,它将被错误对象拒绝。



‘dir’对象方法:

  • dir.close()方法:它异步关闭目录的资源,因此,后续尝试读取将导致错误。返回一个Promise,将在资源关闭后解决。
  • dir.closeSync()方法:它同步关闭目录的资源,因此,后续尝试读取将导致错误。
  • dir.path:返回目录的路径。
  • dir.read()方法:它异步读取下一个目录条目。读取完成后,将返回一个Promise,将使用fs.Dirent进行解析;如果没有更多的目录读取,则返回null。

范例1:

// Node.js program to demonstrate the    
// fsPromises.opendir() Method 
  
// Importing File System module 
const fs = require('fs') 
  
fs.promises.opendir('./test1') 
    .then(dir => { 
        console.log('Directory is opened') 
  
        // Path to the directory 
        console.log( 
        `Path to the directory:${dir.path}`) 
  
        // Closing directory 
        return dir.close() 
    }) 
  
    .then(() => { 
        console.log('Directory closed') 
  
        console.log('\nFurther attempt to'
            + ' read sub-directories\n') 
  
        // Further attemp to access the  
        // directory results in error 
        return dir.read() 
    }) 
  
    .then(dirent => { 
  
        // Does not execute since directory 
        // is closed catch block runs instead 
        console.log(dirent) 
    }) 
    .catch(err => { 
        console.log('Error, Something went wrong!') 
    })

使用async-await实现相同的函数

// Node.js program to demonstrate the    
// fsPromises.opendir() Method 
  
// Importing File System module 
const fs = require('fs') 
  
const readDir = async (path) => { 
  
    // Opeaning directory 
    const dir = await fs.promises.opendir(path) 
    console.log('Directory is opened') 
  
    // Path to the directory 
    console.log(`Path to the directory:${dir.path}`) 
  
    // Closing directory 
    await dir.close() 
    console.log('Directory closed') 
  
    console.log('\nFurther attempt '
            + 'to read sub-directories\n') 
  
    // Further attemp to access the directory 
    // results in error does not execute 
    // since directory is closed catch 
    // block runs instead 
    const subDir = await dir.read() 
    console.log(subDir) 
} 
  
readDir('./test1') 
    .catch(err => { 
        console.log('Error, Something went wrong!') 
    })

输出:

  Directory is opened
  Path to the directory:test1
  Directory closed

  Further attempt to read sub-directories

  Error, Something went wrong!

范例2:

// Node.js program to demonstrate the    
// fsPromises.opendir() Method 
  
// Importing File System module 
const fs = require('fs') 
  
fs.promises.opendir('./test1') 
    .then(dir => { 
        console.log('Directory is opened') 
  
        // Path to the directory 
        console.log(`Path to the directory:${dir.path}`) 
  
        // Reading sub-directories or files 
  
        console.log('\nReading sub-directories:\n') 
        return dir.read() 
    }) 
  
    .then(dirent => { 
        console.log(`Sub-Directory:${dirent.name}`) 
  
        // Reading further sub directories 
        return dir.read() 
    }) 
  
    .then(dirent => { 
        console.log(`Sub-Directory:${dirent.name}`) 
        return dir.read() 
    }) 
  
    .then(dirent => { 
        console.log(`Sub-Directory:${dirent.name}`) 
        return dir.read() 
    }) 
    .then(dirent => { 
        console.log(`Sub-Directory:${dirent.name}`) 
        return dir.read() 
    }) 
    .then(dirent => { 
        console.log(`Sub-Directory:${dirent.name}`) 
        return dir.read() 
    }) 
    .catch(err => { 
        console.log('Error, Something went wrong!') 
    })

使用async-await实现相同的函数

// Node.js program to demonstrate the    
// fsPromises.opendir() Method 
  
// Importing File System module 
const fs = require('fs') 
  
const readDir = async (path) => { 
  
    // Opeaning directory 
    const dir = await fs.promises.opendir(path) 
    console.log('Directory is opened') 
  
    // Path to the directory 
    console.log(`Path to the directory:${dir.path}`) 
  
    // Reading sub-directories or files 
    const subDir1 = await dir.read() 
    const subDir2 = await dir.read() 
    const subDir3 = await dir.read() 
    const subDir4 = await dir.read() 
    const subDir5 = await dir.read() 
  
    // Printing 
    console.log(`Sub-Directory:${subDir1.name}`) 
    console.log(`Sub-Directory:${subDir2.name}`) 
    console.log(`Sub-Directory:${subDir3.name}`) 
    console.log(`Sub-Directory:${subDir4.name}`) 
    console.log(`Sub-Directory:${subDir5.name}`) 
} 
  
readDir('./test1') 
    .catch(err => { 
        console.log('Error, Something went wrong!') 
    })

输出:

  Directory is opened
  Path to the directory:test1

  Reading sub-directories:

  Sub-Directory:example1.txt
  Sub-Directory:example2.txt
  Sub-Directory:example3.txt
  Sub-Directory:example4.txt
  Sub-Directory:null

参考: https://nodejs.org/dist/latest-v14.x/docs/api/fs.html#fs_fspromises_opendir_path_options




相关用法


注:本文由纯净天空筛选整理自hunter__js大神的英文原创作品 Node.js | fsPromises.opendir() Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。