Introduction
Dans ce projet, vous allez apprendre à transformer une fonction asynchrone basée sur des callbacks en une fonction basée sur des Promesses en JavaScript. Plus précisément, vous allez convertir la fonction readFile basée sur des callbacks du module fs dans Node.js en une version basée sur des Promesses.
🎯 Tâches
Dans ce projet, vous allez apprendre :
- Comment identifier les conditions pour transformer une fonction en une fonction basée sur des Promesses
- Comment implémenter une fonction
promisefypour encapsuler une fonction basée sur des callbacks et retourner une Promesse - Comment utiliser la version basée sur des Promesses de la fonction
readFilepour lire un fichier de manière asynchrone
🏆 Réalisations
Après avoir terminé ce projet, vous serez capable de :
- Comprendre les avantages de l'utilisation des Promesses par rapport à la programmation asynchrone basée sur des callbacks
- Implémenter une fonction générique
promisefypour convertir les fonctions basées sur des callbacks en fonctions basées sur des Promesses - Utiliser des fonctions asynchrones basées sur des Promesses dans vos propres projets pour améliorer la lisibilité du code et la gestion des erreurs
Promisifier la fonction readFile
Dans cette étape, vous allez apprendre à transformer la fonction readFile du module fs dans Node.js en une fonction basée sur des Promesses. Suivez les étapes ci-dessous pour terminer cette étape :
- Ouvrez le fichier
index.jsdans votre éditeur de code. - Requiert les modules nécessaires en haut du fichier :
const fs = require("fs");
const path = require("path");
- Définissez le chemin du fichier pour le fichier
test-promisefy.json:
const textPath = path.join(__dirname, "/test-promisefy.json");
- Implémentez la fonction
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 fonction promisefy prend une fonction basée sur des callbacks fn en argument et renvoie une nouvelle fonction qui renvoie une Promesse. La fonction renvoyée appelle la fonction fn d'origine et résout la Promesse avec le résultat ou la rejette avec l'erreur.
- Utilisez la fonction
promisefypour créer une version basée sur des Promesses de la fonctionreadFile:
const readFileSync = promisefy(fs.readFile);
Maintenant, vous pouvez utiliser la fonction readFileSync pour lire le fichier test-promisefy.json de manière asynchrone à l'aide de Promesses.
Lire le fichier à l'aide de la fonction readFile basée sur des Promesses
Dans cette étape, vous allez apprendre à utiliser la fonction readFileSync basée sur des Promesses pour lire le fichier test-promisefy.json.
- Ajoutez le code suivant au fichier
index.js:
fs.readFile(textPath, "utf8", (err, contrast) => {
const readFileSync = promisefy(fs.readFile);
readFileSync(textPath, "utf8")
.then((res) => {
console.log(res === contrast); // Le résultat ici est attendu : true, c'est-à-dire que la promesse renvoie le même contenu que la lecture précédente.
})
.catch((err) => {});
});
Ce code appelle la fonction readFileSync avec le chemin du fichier et l'encodage, puis gère la résolution et la réjection de la promesse à l'aide des méthodes then et catch.
- Maintenant, votre fichier
index.jsdevrait ressembler à ceci :
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); // Le résultat ici est attendu : true, c'est-à-dire que la promesse renvoie le même contenu que la lecture précédente.
})
.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;
- Exécutez le fichier
index.jsdans le terminal :
node index
Vous devriez voir la sortie true, ce qui signifie que la fonction readFile basée sur des Promesses a renvoyé le même contenu que la fonction readFile originale basée sur des callbacks.
Félicitations! Vous avez réussi à transformer la fonction readFile en une fonction basée sur des Promesses et à utiliser la version basée sur des Promesses pour lire un fichier.
Résumé
Félicitations! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires sur LabEx pour améliorer vos compétences.



