Menu
CoddyTech

Olay Yayıcıları

Coddy'nin Node.js Journey'sinin Node.js Temelleri bölümünün bir parçası. Ders 20 / 24.

Mağaza, notu kimin duymak istediğini bilmeden not eklendiğini duyurmalıdır.

node:events içindeki bir EventEmitter, her olay adı için dinleyicilerin listesini tutar. on(name, fn) bir dinleyici ekler; emit(name, ...args) o adla kayıtlı tüm dinleyicileri bu argümanlarla hemen çağırır. Emit işleminden 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!

Mevcut bir nesneyi yayıcıya dönüştürmek için yöntemlerini bir yayıcıya kopyalayın: Object.assign(new EventEmitter(), { ... }).

challenge icon

Görev

Kolay
  • store öğesini, kaydettikten sonra notun metnini ve numarasını added ile yayan bir yayıcı hâline getirin.
  • notes.js, added olayını dinler ve dinleyiciden Saved note 4. çıktısını verir.

node notes.js add Buy bread komutunu çalıştırın. Ardından clear komutunu çalıştırıp iki not ekleyerek numaraların yeniden başladığını görü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;
quiz iconKendini test et

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