¿Cómo operar el método fs.writeFile() basado en devolución de llamada con promesas en Node.js?

El fs.writeFile() es un método definido 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 fs.writeFile() escribe datos de forma asincrónica en un archivo, reemplazando el archivo si ya existe.

El método fs.writeFile() se basa en la devolución de llamada. El uso de métodos de devolución de llamada genera una gran posibilidad de anidamiento de devolución de llamada o problemas infernales de devolución de llamada. Por lo tanto, para evitarlo, casi siempre nos gusta trabajar con un método basado en promesas. Usando algunos métodos adicionales de node.js, podemos operar un método basado en devolución de llamada de manera prometedora.

Sintaxis:

fs.writeFile(path, data, options)

Nota: No se requiere devolución de llamada ya que operamos el método con promesas.

Parámetros: Acepta ruta de tres parámetros, datos y opciones. Las opciones es un parámetro opcional.

  • ruta: es una string, un búfer o una URL que especifica la ruta al archivo donde se realizará la operación de escritura.
  • data: Es una string de una instancia de String, Buffer o Uint8Array. Son los datos que se escribirán en el archivo.
  • opciones: es un parámetro opcional que afecta la salida de alguna manera según lo proporcionemos a la llamada de función o no.
    • codificación: es una string que especifica la técnica de codificación, el valor predeterminado es ‘utf8’.
    • modo: Es un valor entero que especifica el modo del archivo. El valor predeterminado es 0o666.
    • bandera: Es una string que especifica las banderas del sistema de archivos. El valor predeterminado es ‘w’.

Enfoque: el método fs.writeFile() basado en la devolución de llamada. Para operarlo con promesas, primero, usamos el método promisify() definido en el módulo de utilidades para convertirlo en un método basado en promesas.

Ejemplo 1: Nombre de archivo: 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 writeFile = util.promisify(fs.writeFile)
const readFile = util.promisify(fs.readFile)
  
// The readFile method read the contents of
// the file and returns the buffer form of
// the data
readFile('./testFile.txt')
.then(buff => {
  const oldContent = buff.toString()
  console.log(`\nOld content of the file 
                     :\n${oldContent}`)
  
  // The writeFile method write to the file
  // If is already exist, replaces the file
  return writeFile('./testFile.txt', 
        "Hey, I am newly added!")
})
  
.then(() => {
  
  // Fetching contents of the file
  // after write operation
  return readFile('./testFile.txt')
})
  
.then(buff => {
  const newContent = buff.toString()
  console.log(`\nNew content of the 
            file :\n${newContent}`)
})
  
// If promise get rejected
.catch(err => {
   console.log(`\nError Occurs, 
          Error code -> ${err.code}, 
   Error NO -> ${err.errno}`)
})

Implementando la misma funcionalidad usando 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 writeFile = util.promisify(fs.writeFile)
const readFile = util.promisify(fs.readFile)
  
const writeFileContent = async (path, data) => {
  
  // The readFile method read the contents
  // of the file and returns the buffer 
  // form of the data
  const oldBuff = await readFile(path)
  const oldContent = oldBuff.toString()
  console.log(`\nOld content of the 
             file :\n${oldContent}`)
  
  // The writeFile method write to the file
  // If is already exist, replaces the file
  await writeFile(path, data)
  
  // Fetching contentsof the file after 
  // write operation
  const newBuff = await readFile(path)
    
  const newContent = newBuff.toString()
  console.log(`\nNew content of the 
             file :\n${newContent}`)
}
   
writeFileContent('./testFile.txt', 
          "Hey, I am newly added!")
  
// If promise get rejected
.catch(err => {
  console.log(`\nError Occurs, 
    Error code -> ${err.code},
    Error NO -> ${err.errno}`)
})

Ejecute el archivo index.js con el siguiente comando:

node index.js

Producción:

Ejemplo 2: cuando se da la ruta al archivo no existe.
Nombre de archivo: 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 writeFile = util.promisify(fs.writeFile)
const readFile = util.promisify(fs.readFile)
  
// The writeFile method write to the file if
// the file does not exist, creates the file
// and then write to the file
writeFile('./testFile.txt', 
"Hey there, I am newly added content of newly added file!")
.then(() => {
  
  // The readFile method read the contents of the file
  // and returns the buffer form of the data
  
  // Fetching contents of the file after write operation
  return readFile('./testFile.txt')
})
  
.then(buff => {
  const content = buff.toString()
  console.log(`\nContents of the file :\n${content}`)
})
  
// If promise get rejected
.catch(err => {
  console.log(`\nError Occurs, Error code -> ${err.code},
  Error NO -> ${err.errno}`);
})

Implementando la misma funcionalidad usando 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 writeFile = util.promisify(fs.writeFile)
const readFile = util.promisify(fs.readFile)
  
const writeFileContent = async (path, data) => {
  
  // The writeFile method write to the file
  // If the file does not exist, creates the
  // file and then write to the file
  writeFile(path, data)
  
  // The readFile method read the contents of
  // the file and returns the buffer form of
  // the data
  const buff = await readFile(path)
    
  const content = buff.toString()
  console.log(`\nContents of the file :\n${content}`)
}
   
writeFileContent('./testFile.txt', 
"Hey there, I am newly added content of"
           + " newly added file!")
  
// If promise get rejected
.catch(err => {
  console.log(`\nError Occurs, 
    Error code -> ${err.code},
    Error NO -> ${err.errno}`);
});

Ejecute el archivo index.js con el siguiente comando:

node index.js

Estructura del directorio antes de ejecutar el programa:

Estructura del directorio después de ejecutar el programa:

Producción:

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 *