Método Node.js fsPromises.opendir() – Part 1

El método fsPromises.opendir() se define en el módulo Sistema de archivos de Node.js. El módulo del Sistema de Archivos es básicamente para interactuar con el disco duro de la computadora del usuario. El método se utiliza para abrir un directorio de forma asíncrona.
El método fsPromise.opendir() devuelve una promesa resuelta o rechazada y, por lo tanto, evita los problemas de anidamiento o infierno de devolución de llamada que pueden ocurrir en fs.opendir(). La promesa se resuelve con el objeto ‘fs.Dir’, el objeto en sí contiene otras funciones para acceder y cerrar el directorio. En caso de que se rechace la promesa, se rechazará con un objeto de error.
Sintaxis:  

fs.promises.opendir(path, options)

Parámetros: Este método acepta dos parámetros como se mencionó anteriormente y se describe a continuación:  

  • ruta: Es un String, Buffer o Url que especifica la ruta al directorio que tiene que estar abierto.
  • opciones: es un parámetro opcional que afecta la salida de alguna manera según se proporcione o no a la llamada de función. 
    • codificación: especifica la técnica de codificación, por defecto es ‘UTF8’
    • bufferSize: es un número que especifica la cantidad de entradas de directorio que se almacenan en el búfer internamente cuando se lee desde el directorio. Un valor alto de bufferSize garantiza un buen rendimiento pero conduce a más usos de memoria.

Valor devuelto: este método devuelve una promesa resuelta con el objeto ‘fs.Dir’, el objeto en sí contiene otras funciones para acceder y cerrar el directorio. En caso de que se rechace la promesa, se rechazará con un objeto de error.
métodos de objeto ‘dir’:  

  • Método dir.close(): cierra de forma asincrónica los recursos del directorio y, por lo tanto, los intentos posteriores de lectura darán lugar a errores. Se devuelve una Promesa que se resolverá una vez cerrado el recurso.
  • Método dir.closeSync(): cierra sincrónicamente los recursos del directorio y, por lo tanto, los intentos posteriores de lectura generarán errores.
  • dir.path: Devuelve la ruta al directorio.
  • Método dir.read(): lee de forma asíncrona la siguiente entrada del directorio. Una vez completada la lectura, se devuelve una Promesa que se resolverá con un fs.Dirent, o nulo si no hay más directorios leídos.

Ejemplo 1: 

javascript

// 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 attempt 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!')
    })

Implementando la misma funcionalidad usando async-await 

javascript

// 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 attempt 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!')
    })

Producción: 

  Directory is opened
  Path to the directory: test1
  Directory closed

  Further attempt to read sub-directories

  Error, Something went wrong!

Ejemplo 2: 

javascript

// 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!')
    })

Implementando la misma funcionalidad usando async-await 

javascript

// 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!')
    })

Producción: 

  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

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

Publicación traducida automáticamente

Artículo escrito por hunter__js y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *