Event-Emitter
Teil des Abschnitts Node.js-Grundlagen der Node.js-Journey von Coddy. Lektion 20 von 24.
Der Speicher sollte bekannt geben, dass eine Notiz hinzugefügt wurde, ohne zu wissen, wer davon erfahren möchte.
Ein EventEmitter aus node:events führt für jeden Ereignisnamen eine Liste von Listenern. on(name, fn) fügt einen Listener hinzu; emit(name, ...args) ruft sofort jeden Listener für diesen Namen mit diesen Argumenten auf. Ein Listener, der nach dem Emit hinzugefügt wird, hört nichts.
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 kam herein, dann Ding!Um ein vorhandenes Objekt in einen Emitter umzuwandeln, kopiere seine Methoden darauf: Object.assign(new EventEmitter(), { ... }).
Aufgabe
Einfach- Mache
storezu einem Ereignis-Emitter, der nach dem Speichern das Ereignisaddedmit dem Text und der Nummer der Notiz auslöst. notes.jslauscht aufaddedund gibt über den ListenerSaved note 4.aus.
Führe node notes.js add Buy bread aus. Verwende anschließend clear und füge zwei Notizen hinzu, um zu sehen, wie die Nummerierung wieder von vorn beginnt.
Probier es selbst
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;
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Node.js-Grundlagen
1JavaScript mit Node ausführen
Hallo, NodeKommandozeilenargumenteBefehle