Emisores de eventos
Parte de la sección Conceptos básicos de Node.js del Journey de Node.js de Coddy. Lección 20 de 24.
La tienda debería anunciar que se añadió una nota sin saber quién quiere enterarse.
Un EventEmitter de node:events mantiene una lista de oyentes para cada nombre de evento. on(name, fn) añade un oyente; emit(name, ...args) llama enseguida a todos los oyentes de ese nombre, con esos argumentos. Un oyente añadido después de la emisión no oye nada.
import { EventEmitter } from 'node:events';
const door = new EventEmitter();
door.on('open', (who) => console.log(`${who} came in`));
door.on('open', () => console.log('Ding!'));
door.emit('open', 'Ada');
// Ada entró, luego Ding!Para convertir un objeto existente en un emisor, copia sus métodos en uno: Object.assign(new EventEmitter(), { ... }).
Desafío
Fácil- Haz que
storesea un emisor que emitaaddedcon el texto y el número de la nota después de guardarla. notes.jsescuchaaddede imprimeSaved note 4.desde el listener.
Ejecuta node notes.js add Buy bread. Después, usa clear y añade dos notas para ver que la numeración empieza de nuevo.
Pruébalo tú mismo
import { existsSync } from 'node:fs';
import { readFile, writeFile } from 'node:fs/promises';
const file = 'notes.json';
const readJson = async (name, fallback) => {
if (!existsSync(name)) {
return fallback;
}
try {
return JSON.parse(await readFile(name, 'utf8'));
} catch (err) {
console.error(`${name} is damaged: ${err.message}`);
process.exit(1);
}
};
const [notes, settings] = await Promise.all([readJson(file, []), readJson('settings.json', {})]);
const store = {
notes,
settings,
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;
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Conceptos básicos de Node.js
1Ejecutar JavaScript en Node
Hola, NodeArgumentos de la línea de comandosComandos