Event Emitter
Termasuk bagian Dasar-Dasar Node.js dalam perjalanan Node.js di Coddy. Pelajaran 20 dari 24.
Toko seharusnya mengumumkan bahwa sebuah catatan telah ditambahkan tanpa mengetahui siapa yang ingin mendengarnya.
EventEmitter dari node:events menyimpan daftar listener untuk setiap nama event. on(name, fn) menambahkan listener; emit(name, ...args) langsung memanggil setiap listener untuk nama tersebut dengan argumen-argumen itu. Listener yang ditambahkan setelah emit tidak akan mendengar apa pun.
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 masuk, lalu Ding!Untuk mengubah object yang sudah ada menjadi emitter, salin method-nya ke salah satu emitter: Object.assign(new EventEmitter(), { ... }).
Tantangan
Mudah- Buat
storemenjadi emitter yang memancarkanaddeddengan teks dan nomor catatan setelah disimpan. notes.jsmendengarkanaddeddan mencetakSaved note 4.dari listener.
Jalankan node notes.js add Buy bread. Lalu clear dan tambahkan dua catatan untuk melihat nomornya mulai lagi.
Coba sendiri
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;
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar Node.js
1Menjalankan JavaScript di Node
Halo, NodeArgumen Baris PerintahPerintahLatihan sendiri: Playground Express