Olay Yayıcıları
Coddy'nin Node.js Journey'sinin Node.js Temelleri bölümünün bir parçası. Ders 29 / 33.
Mağaza, bunu kimin duymak istediğini bilmeden bir notun eklendiğini duyurmalı.
node:events içindeki bir EventEmitter, her olay adı için dinleyicilerin listesini tutar. on(name, fn) bir dinleyici ekler; emit(name, ...args) bu ad için tüm dinleyicileri, bu argümanlarla hemen çağırır. Yayımlamadan sonra eklenen bir dinleyici hiçbir şey duymaz.
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 içeri girdi, ardından Ding!new EventEmitter(), on ve emit yöntemlerine sahip bir nesne olan bir yayıcı oluşturur. Mevcut bir nesneye bu yöntemleri eklemek için özelliklerini yeni bir yayıcıya kopyalayın: Object.assign(new EventEmitter(), { notes: [] }), notes özelliğine de sahip bir yayıcı döndürür.
Görev
KolayBu adım, Timers dersindeki proje dosyaların yerine kurs için hazırlanmış notlar komut satırı aracı projesini açar (notes.js dâhil). Önceki çalışmaların kendi dersinde kalır. store.js dosyasını düzenlemeden önce sağlanan dosyaları oku. Bu kopya, not komutlarını ve eşzamansız dosya yardımcılarını içerir.
Depo her yeni notu duyurmalı ve diğer kodların bununla ilgili ne yapacağına karar vermesine izin vermelidir. Depoyu bir olay yayıcısına dönüştür.
store.jsdosyasındastorenesnesini, kendi tüm özelliklerini ve yöntemlerini koruyan birEventEmitteryap.EventEmitteröğesininode:eventsmodülünden içe aktar.new EventEmitter()yeni ve boş bir yayıcı oluşturur. Derste gösterildiği gibi, deponun nesnesiniObject.assignile bu yayıcıya kopyala.store.jsdosyasında,addiçinde, notlar kaydedildikten sonra notun metni ve numarası olmak üzere iki değerleaddedolayını yay.notes.jsdosyasında depodakiaddedolayını dinle. DinleyiciSaved notemetnini, numarayı ve noktayı yazdırır. Komutlar çalışmadan önce, dosyanın üst tarafına yakın bir yere ekle; böyleceaddolayı yaydığında dinleyici zaten dinliyor olur. Artıkadddalı kendisi hiçbir şey yazdırmaz; yalnızcastore.addçağrısını yapar.
node notes.js add Buy bread yeni notun numarasını içeren tek bir satır yazdırır; örneğin:
Saved note 3.clear komutundan sonra add Buy milk, Saved note 1. yazdırır; add Call Ada ise Saved note 2. yazdırır.
Dene: $ node notes.js ifadesinden sonra kutuya add Buy bread yaz ve Enter tuşuna bas. Dinleyicinin yazdırdığı Saved note metnini ve yeni numarayı görürsün. Ardından clear, add Buy milk ve add Call Ada yaz: önce Saved note 1., sonra Saved note 2. görürsün.
Kendin dene
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;
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Node.js Temelleri bölümündeki tüm dersler
1JavaScript’i Node Üzerinde Çalıştırma
Merhaba, NodeKomutu OkumaKomut Satırı ArgümanlarıKomutlarKendi başına pratik yap: Express playground