Introducción
En este proyecto, aprenderás cómo promisificar una función asincrónica basada en callbacks en JavaScript. Específicamente, convertirás la función readFile basada en callbacks del módulo fs en Node.js en una versión basada en Promesas.
🎯 Tareas
En este proyecto, aprenderás:
- Cómo identificar las condiciones para promisificar una función
- Cómo implementar una función
promisefypara envolver una función basada en callbacks y devolver una Promesa - Cómo usar la versión basada en Promesas de la función
readFilepara leer un archivo de manera asíncrona
🏆 Logros
Después de completar este proyecto, podrás:
- Comprender los beneficios de usar Promesas en lugar de la programación asíncrona basada en callbacks
- Implementar una función genérica
promisefypara convertir funciones basadas en callbacks en funciones basadas en Promesas - Utilizar funciones asíncronas basadas en Promesas en tus propios proyectos para mejorar la legibilidad del código y el manejo de errores
Promisificar la función readFile
En este paso, aprenderás cómo promisificar la función readFile del módulo fs en Node.js. Siga los pasos siguientes para completar este paso:
- Abra el archivo
index.jsen su editor de código. - Requiera los módulos necesarios al principio del archivo:
const fs = require("fs");
const path = require("path");
- Defina la ruta del archivo para el archivo
test-promisefy.json:
const textPath = path.join(__dirname, "/test-promisefy.json");
- Implemente la función
promisefy:
const promisefy = (fn) => {
return (textPath, type) => {
return new Promise((resolve, reject) => {
fn(textPath, type, (err, contrast) => {
if (err) {
reject(err);
} else {
resolve(contrast);
}
});
});
};
};
La función promisefy toma una función basada en callback fn como argumento y devuelve una nueva función que devuelve una Promesa. La función devuelta llama a la función original fn y resuelve la Promesa con el resultado o la rechaza con el error.
- Utilice la función
promisefypara crear una versión basada en Promesas de la funciónreadFile:
const readFileSync = promisefy(fs.readFile);
Ahora, puede usar la función readFileSync para leer el archivo test-promisefy.json de manera asíncrona usando Promesas.
Leer el archivo usando la función readFile basada en Promesas
En este paso, aprenderás cómo usar la función readFileSync basada en Promesas para leer el archivo test-promisefy.json.
- Agregue el siguiente código al archivo
index.js:
fs.readFile(textPath, "utf8", (err, contrast) => {
const readFileSync = promisefy(fs.readFile);
readFileSync(textPath, "utf8")
.then((res) => {
console.log(res === contrast); // El resultado aquí se espera: true, es decir, la promesa devuelve el mismo contenido que la lectura anterior.
})
.catch((err) => {});
});
Este código llama a la función readFileSync con la ruta del archivo y la codificación, y luego maneja la resolución y rechazo de la Promesa usando los métodos then y catch.
- Ahora, su archivo
index.jsdebería verse así:
const fs = require("fs");
const path = require("path");
const textPath = path.join(__dirname, "/test-promisefy.json");
fs.readFile(textPath, "utf8", (err, contrast) => {
const readFileSync = promisefy(fs.readFile);
readFileSync(textPath, "utf8")
.then((res) => {
console.log(res === contrast); // El resultado aquí se espera: true, es decir, la promesa devuelve el mismo contenido que la lectura anterior.
})
.catch((err) => {});
});
const promisefy = (fn) => {
return (textPath, type) => {
return new Promise((resolve, reject) => {
fn(textPath, type, (err, contrast) => {
if (err) {
reject(err);
} else {
resolve(contrast);
}
});
});
};
};
module.exports = promisefy;
- Ejecute el archivo
index.jsen la terminal:
node index
Debería ver la salida true, lo que significa que la función readFile basada en Promesas devolvió el mismo contenido que la función readFile original basada en callbacks.
¡Felicitaciones! Ha promisificado con éxito la función readFile y ha usado la versión basada en Promesas para leer un archivo.
Resumen
¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.



