Async e Await
Fa parte della sezione Fondamenti di Node.js del percorso Node.js di Coddy. Lezione 16 di 24.
Una catena di chiamate .then si legge diversamente da come pensi ai passaggi: leggi, poi analizza, poi salva.
All'interno di una funzione async, await mette in pausa l'esecuzione finché una promise non si risolve e ti fornisce il suo valore. Una promise non riuscita genera un errore in quel punto, quindi try e catch lo gestiscono. In un modulo, await funziona anche al livello superiore.
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);Una funzione async restituisce sempre una promise, quindi anche chi la chiama deve usare await. Dimentica un await e otterrai la promise stessa, Promise { <pending> }, invece del suo valore.
Sfida
Facilestore.jsora legge e scrive connode:fs/promises. Aggiungi gliawaitmancanti affinché ogni comando funzioni come prima.notes.jsattendestore.addestore.remove, che ora sonoasync.
Esegui prima node notes.js list per leggere l’errore, poi add e done 1 quando funziona.
Provalo tu
import { existsSync } from 'node:fs';
import { readFile, writeFile } from 'node:fs/promises';
const file = 'notes.json';
// readFile e writeFile ora restituiscono delle promise. Attendi ciascuna con 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;
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti di Node.js
1Eseguire JavaScript con Node
Ciao, NodeArgomenti della riga di comandoComandi