Transformer les fonctions asynchrones basées sur des callbacks en fonctions basées sur des Promesses

JavaScriptJavaScriptBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

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 promisefy pour encapsuler une fonction basée sur des callbacks et retourner une Promesse
  • Comment utiliser la version basée sur des Promesses de la fonction readFile pour 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 promisefy pour 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

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript/BasicConceptsGroup -.-> javascript/functions("Functions") javascript/AdvancedConceptsGroup -.-> javascript/async_prog("Asynchronous Programming") javascript/AdvancedConceptsGroup -.-> javascript/error_handle("Error Handling") subgraph Lab Skills javascript/functions -.-> lab-445680{{"Transformer les fonctions asynchrones basées sur des callbacks en fonctions basées sur des Promesses"}} javascript/async_prog -.-> lab-445680{{"Transformer les fonctions asynchrones basées sur des callbacks en fonctions basées sur des Promesses"}} javascript/error_handle -.-> lab-445680{{"Transformer les fonctions asynchrones basées sur des callbacks en fonctions basées sur des Promesses"}} end

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 :

  1. Ouvrez le fichier index.js dans votre éditeur de code.
  2. Requiert les modules nécessaires en haut du fichier :
const fs = require("fs");
const path = require("path");
  1. Définissez le chemin du fichier pour le fichier test-promisefy.json :
const textPath = path.join(__dirname, "/test-promisefy.json");
  1. 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.

  1. Utilisez la fonction promisefy pour créer une version basée sur des Promesses de la fonction readFile :
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.

  1. 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.

  1. Maintenant, votre fichier index.js devrait 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;
  1. Exécutez le fichier index.js dans 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.

✨ Vérifier la solution et pratiquer

Sommaire

Félicitations! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires sur LabEx pour améliorer vos compétences.