Tutoriel de promesse Node.js
⚡ Résumé intelligent
Dans Node.js, les promesses remplacent les rappels profondément imbriqués par un objet renvoyé qui se stabilise une seule fois, de sorte que le travail asynchrone sur la base de données se lit comme une chaîne plate de clauses « then » au lieu d'une pyramide de fonctions anonymes.
Dans les didacticiels précédents, vous auriez vu des fonctions de rappel utilisées pour les événements asynchrones. Mais parfois, les fonctions de rappel peuvent devenir un cauchemar lorsqu'elles commencent à s'imbriquer et que le programme commence à devenir long et complexe.
Que sont les promesses ?
Avant de commencer par les promesses, revenons d'abord sur ce que sont les fonctions de « rappel » dans Node.jsNous avons beaucoup vu ces fonctions de rappel dans les chapitres précédents, alors passons rapidement en revue l'une d'entre elles.
L'exemple ci-dessous montre un extrait de code utilisé pour se connecter à un MongoDB base de données et effectuer une opération de mise à jour sur l'un des enregistrements de la base de données.
- Dans le code ci-dessus, la partie de la fonction (err, db) est connue sous le nom de déclaration d'une fonction anonyme ou de rappel. Lorsque le MongoClient crée une connexion au MongoDB base de données, il reviendra à la fonction de rappel une fois l'opération de connexion terminée. Donc, dans un sens, les opérations de connexion se déroulent en arrière-plan, et lorsqu'elles sont terminées, elles appellent notre fonction de rappel. N'oubliez pas que c'est l'un des points clés de Node.js pour permettre à de nombreuses opérations de se produire simultanément et ainsi ne bloquer aucun utilisateur pour effectuer une opération.
- Le deuxième bloc de code est ce qui est exécuté lorsque la fonction de rappel est réellement appelée. La fonction de rappel met simplement à jour un enregistrement dans notre MongoDB base de données.
Alors, qu’est-ce qu’une promesse ? Eh bien, une promesse n'est qu'une amélioration des fonctions de rappel dans Node.js. Au cours du cycle de vie de développement, il peut arriver que vous deviez imbriquer plusieurs fonctions de rappel ensemble. Cela peut devenir un peu compliqué et difficile à maintenir à un moment donné. En bref, une promesse est une amélioration des rappels qui vise à atténuer ces problèmes.
La syntaxe de base d'une promesse est présentée ci-dessous ;
var promise = doSomethingAync()
promise.then(onFulfilled, onRejected)
- "doSomethingAync" est n'importe quelle fonction de rappel ou asynchrone qui effectue une sorte de traitement.
- Cette fois, lors de la définition du rappel, une valeur est renvoyée appelée « promesse ».
- Lorsqu'une promesse est renvoyée, elle peut avoir 2 sorties. Ceci est défini par la « clause then ». Soit l'opération peut être un succès, ce qui est indiqué par le paramètre « onFulfilled ». Ou il peut y avoir une erreur indiquée par le paramètre « onRejected ».
A PROMETTONS se situe dans l'un des trois États et s'y installe une fois :
| État | Sens |
|---|---|
| En Attente | Les travaux ne sont pas terminés. |
| Réalisé | la fonction onFulfilled s'exécute avec la valeur. |
| Rejeté | La fonction onRejected s'exécute avec l'erreur. |
À noter: L’aspect clé d’une promesse est donc la valeur de retour. Il n'y a aucun concept de valeur de retour lorsque vous travaillez avec des rappels normaux dans Node.js. Grâce à la valeur de retour, nous avons plus de contrôle sur la façon dont la fonction de rappel peut être définie.
Note de version : Ces exemples fonctionnent toujours avec Node.js 24, la branche LTS active en 2026. Depuis Node.js 15, rejet non géré interrompt le processus au lieu d'afficher un avertissement, fermez donc chaque chaîne avec .catch().
Dans la rubrique suivante, nous verrons un exemple de promesses et comment elles bénéficient des rappels.
Rappels aux promesses
Examinons maintenant un exemple de la façon dont nous pouvons utiliser les « promesses » à partir d'une application Node.js. Afin d'utiliser les promesses dans une application Node.js, le module 'promise' doit d'abord être téléchargé et installé.
Nous allons ensuite modifier notre code comme indiqué ci-dessous, qui met à jour un EmployeeName dans la collection 'Employee' en utilisant des promesses.
Étape 1) Installation du Modules NPM
Pour utiliser les promesses dans une application Node.js, le module `promise` est requis. Pour installer ce module, exécutez la commande ci-dessous.
promesse d'installation npm
Étape 2) Modifier le code pour inclure des promesses
var Promise = require('promise'); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url) .then(function(err, db) { db.collection('Employee').updateOne({ "EmployeeName": "Martin" }, { $set: { "EmployeeName": "Mohan" } }); });
Code Explication:
- La première partie consiste à inclure le module 'promise' qui nous permettra d'utiliser la fonctionnalité de promesse dans notre code.
- Nous pouvons maintenant ajouter la fonction « alors » à notre fonction MongoClient.connect. Cela fait donc que lorsque la connexion est établie à la base de données, nous devons exécuter l'extrait de code défini par la suite.
- Enfin, nous définissons notre extrait de code qui effectue le travail de mise à jour EmployeeName de l'employé portant le nom de « Martin » en « Mohan ».
Remarque:
Si vous vérifiez maintenant le contenu de votre MongoDB base de données, vous constaterez que si un enregistrement avec EmployeeName de « Martin » existe, il sera mis à jour en « Mohan ».
Pour vérifier que les données ont été correctement insérées dans la base de données, vous devez exécuter les commandes suivantes dans MongoDB
- utiliser EmployeeDB
- db.Employee.find({EmployeeName : “Mohan”})
La première instruction vérifie que vous êtes bien connecté à la base de données EmployeeDB. La seconde instruction recherche l'enregistrement contenant le nom d'employé « Mohan ».
Gérer les promesses imbriquées
Lors de la définition des promesses, il convient de noter que la méthode « alors » elle-même renvoie une promesse. Ainsi, dans un sens, les promesses peuvent être imbriquées ou enchaînées les unes aux autres.
Dans l'exemple ci-dessous, nous utilisons le chaînage pour définir 2 fonctions de rappel, qui insèrent toutes deux un enregistrement dans le MongoDB base de données.
(Note: Le chaînage est un concept utilisé pour lier l'exécution de méthodes entre elles. Supposons que votre application dispose de 2 méthodes appelées « méthodeA » et « méthodeB ». Et la logique était telle que « méthodeB » devait être appelée après « méthodeA », puis vous enchaîneriez l'exécution de telle manière que « méthodeB » soit appelée directement après « méthodeA ».)
L'élément clé à noter dans cet exemple est que le code devient plus propre, lisible et maintenable grâce à l'utilisation de promesses imbriquées.
var Promise = require('promise'); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url) .then(function(db) { db.collection('Employee').insertOne({ Employeeid: 4, EmployeeName: "NewEmployee" }) .then(function(db1) { db1.collection('Employee').insertOne({ Employeeid: 5, EmployeeName: "NewEmployee1" }) }) });
Code Explication:
- Nous définissons maintenant 2 clauses « then » qui s’exécutent l’une après l’autre. Dans la première clause then, nous transmettons le paramètre 'db' qui contient notre connexion à la base de données. Nous utilisons ensuite la propriété collection de la connexion 'db' pour insérer des enregistrements dans la collection 'Employee'. La méthode « insertOne » est utilisée pour insérer le document réel dans la collection Employee.
- On utilise alors le 2nd clause then également pour insérer un autre enregistrement dans la base de données.
Si vous vérifiez maintenant le contenu de votre MongoDB Dans la base de données, vous trouverez les 2 enregistrements insérés. MongoDB base de données.
Équivalent moderne : async et await, standards depuis ES2017, consomment ces promesses sans callbacks then et ont largement remplacé générateur Les bibliothèques de contrôle de flux telles que co, tandis que la prise en charge native des promesses rend q et bluebird superflues. Le deuxième bloc montre alors la réception uniquement de db.
Créer une promesse personnalisée
Il est possible de créer une promesse personnalisée grâce au module Node.js « q ». La bibliothèque « q » doit être téléchargée et installée via le gestionnaire de paquets Node (NPM). Une fois la bibliothèque « q » installée, la méthode « denodeify » permet de transformer n'importe quelle fonction en une fonction renvoyant une promesse.
Dans l'exemple ci-dessous, nous allons créer une fonction simple appelée « Ajouter » qui ajoutera 2 nombres. Nous allons convertir cette fonction en fonction pour renvoyer une promesse.
Une fois cela fait, nous utiliserons la promesse renvoyée par la fonction Add pour afficher un message dans le console.log.
Suivons les étapes ci-dessous pour créer notre fonction personnalisée afin de renvoyer une promesse.
Étape 1) Installation des modules NPM
Pour utiliser la commande « q » dans une application Node.js, le module « q » est requis. Pour installer le module « q », exécutez la commande ci-dessous.
npm installer q
Étape 2) Définissez le code suivant qui sera utilisé pour créer la promesse personnalisée.
Code Explication:
- Le premier bit consiste à inclure la bibliothèque 'q' en utilisant le mot-clé require. En utilisant cette bibliothèque, nous pourrons définir n'importe quelle fonction pour renvoyer un rappel.
- Nous créons une fonction appelée Add qui ajoutera 2 nombres définis dans les variables a et b. La somme de ces valeurs sera stockée dans la variable c.
- Nous utilisons ensuite la bibliothèque q pour dénodéifier (la méthode utilisée pour convertir n'importe quelle fonction en une fonction qui renverrait une promesse) notre fonction Add, ou en d'autres termes, convertir notre fonction Add en une fonction qui renvoie une promesse.
- Nous appelons maintenant notre fonction « Ajouter » et sommes en mesure d'obtenir une valeur promise de retour grâce à l'étape précédente que nous avons effectuée pour dénodéifier la fonction Ajouter.
- Le mot-clé « then » est utilisé pour spécifier que si la fonction est exécutée avec succès, la chaîne « Fonction additionnelle terminée » s'affiche dans la console.log.
Lorsque le code ci-dessus est exécuté, la sortie « Fonction d'ajout terminée » sera affichée dans le console.log comme indiqué ci-dessous.





