Async et Await
Fait partie de la section Les bases de Node.js du Journey Node.js de Coddy. Leçon 16 sur 24.
Une chaîne d’appels .then se lit différemment de la façon dont tu envisages les étapes : lire, puis analyser, puis enregistrer.
Dans une fonction async, await met en pause jusqu’à ce qu’une promesse soit réglée et te fournit sa valeur. Une promesse rejetée déclenche une exception à cet endroit, que try et catch permettent de gérer. Dans un module, await fonctionne aussi au niveau supérieur.
import { readFile } from 'node:fs/promises';
const loadConfig = async () => {
try {
return JSON.parse(await readFile('config.json', 'utf8'));
} catch {
return {};
}
};
const config = await loadConfig();
console.log(config.port ?? 3000);Une fonction async renvoie toujours une promesse, donc son appelant doit lui aussi utiliser await. Si tu oublies un await, tu obtiens la promesse elle-même, Promise { <pending> }, au lieu de sa valeur.
Défi
Facilestore.jslit et écrit désormais avecnode:fs/promises. Ajoute lesawaitmanquants pour que chaque commande fonctionne comme avant.notes.jsattendstore.addetstore.remove, qui sont désormaisasync.
Exécute d’abord node notes.js list pour lire l’erreur, puis add et done 1 lorsque tout fonctionne.
Essayez vous-même
import { existsSync } from 'node:fs';
import { readFile, writeFile } from 'node:fs/promises';
const file = 'notes.json';
// readFile et writeFile renvoient maintenant des promesses. Attendez chacune avec await.
const load = async () => {
if (!existsSync(file)) {
return [];
}
try {
return JSON.parse(readFile(file, 'utf8'));
} catch (err) {
console.error(`notes.json is damaged: ${err.message}`);
process.exit(1);
}
};
const store = {
notes: load(),
async save() {
writeFile(file, JSON.stringify(this.notes, null, 2));
},
async add(text) {
this.notes.push(text);
this.save();
return this.notes.length;
},
async remove(n) {
const [text] = this.notes.splice(n - 1, 1);
this.save();
return text;
},
};
export default store;
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Les bases de Node.js
1Exécuter JavaScript avec Node
Bonjour, NodeArguments de ligne de commandeCommandes4Node asynchrone
Fonctions de rappelPromesses