Promise.all
Parte da seção Fundamentos de Node.js do Journey de Node.js da Coddy. Lição 17 de 24.
A loja agora precisa de dois arquivos, as notas e as configurações, e ler um depois do outro leva o dobro do tempo.
Promise.all([a, b]) permite que ambas as promessas sejam executadas ao mesmo tempo e aguarda até que ambas sejam concluídas. Ele retorna os resultados na mesma ordem do array e falha assim que uma delas falha.
const [user, prefs] = await Promise.all([
readFile('user.json', 'utf8'),
readFile('prefs.json', 'utf8'),
]);Use-o quando as leituras não dependerem uma da outra. Quando a segunda precisar do resultado da primeira, aguarde-as uma de cada vez.
Desafio
Fácilstore.jslênotes.jsonesettings.jsonao mesmo tempo comPromise.all. Um arquivo de configurações ausente é considerado{}.- Quando
settings.jsoncontém"sort": "newest",listexibe primeiro a nota mais recente. Cada nota mantém seu número.
Execute node notes.js list. Depois, altere newest para oldest em settings.json e execute novamente.
Experimente você mesmo
import { existsSync } from 'node:fs';
import { readFile, writeFile } from 'node:fs/promises';
const file = 'notes.json';
const load = async () => {
if (!existsSync(file)) {
return [];
}
try {
return JSON.parse(await readFile(file, 'utf8'));
} catch (err) {
console.error(`notes.json is damaged: ${err.message}`);
process.exit(1);
}
};
const store = {
notes: await load(),
async save() {
await writeFile(file, JSON.stringify(this.notes, null, 2));
},
async add(text) {
this.notes.push(text);
await this.save();
return this.notes.length;
},
async remove(n) {
const [text] = this.notes.splice(n - 1, 1);
await this.save();
return text;
},
};
export default store;
Todas as lições de Fundamentos de Node.js
1Executando JavaScript no Node
Olá, NodeArgumentos de linha de comandoComandos