EventEmitter همه چی راجع به


خود عکس کامل داره میگه چخبره:))

سلام رفقا ، این اولین نوشته ام هست امیدوارم مفید باشه ، سوتی چیزی دیدین حتما بگید درستش کنم



اقا ما یه هفته ای بود درگیر یه اصطلاحی شده بودیم اونم EventEmitter ها ! خلاصه ازین بپرس ازون بپرس مگه این رو میشد بفهمی :/ خلاصه نشد اومدیمو تو مقالات مدیوم ( هَوو ویرگول:دی) فهمیدیم حالا میزارم که بچها خودمونم یاد بگیرن



همونطور ک میدونید nodejs یه یجور Runtime Env هست که از معماری asynchronous استفاده میکنه خب حالا این ایونت ها کجا بدردمون میخوره ، فرض کنید شما یه کال بک دارید که هرموقع ک کال شده میخواید ازش یه استفاده ببرید واسه اینکه اینکارو انجام بدید باید اون تابع رو async کنید و کال بک رو await یا روش های دیگه ...


اما یه موقع هایی هست شما بین کال کردن و کال بک گرفتن میخواید پروسستون سریعتر بشه یه مثال میزنم: فرض کنید یه کاربرقراره تو سایتتون رجیستر کنه خب نحوه کار اینه فرم ارسال میشه ولیدیت میشه

مجدد برمیگرده و ثبت نام ولی شما میخواید تو این بین هرکاربر رو مشخصاتش رو مثلا از استک بگیرید واسه این کار باید کلاینت رو منتظر نگه داشت؟؟ نه طبیعتا ! خب کاری ک اینجا میکنیم اینه ک یه رویداد (event) تعریف میکنیم که هربار تابع ما کال بک برگشت داد ، این ایونت اجرا بشه و رویدادمون رو اجرا کنه ،

مثال دوم : فرض کنید قراره یه سیستم مدیریت بلیط برای کنسرت ( ترجیحا شایع) بسازید

خب بریم بسازیم :)

const EventEmitter = require(&quotevents&quot);

class TicketManager extends EventEmitter {
    constructor(supply) {
        super();
        this.supply = supply;
    }

    buy(email, price) {
        this.supply--;
        this.emit(&quotbuy&quot, email, price, Date.now());
    }
}
module.exprots = TicketManager



خب اومدیم خط اول ماژول رو فراخوانی کردیم تو خط دوم یک کلاس ساختیم که از ماژول ما ارث بری کنه متدهاشو ... سازنده ساختیم بابت ورودی های کلاسمون ،کاربرد سوپر هم برای اینه ک به ارث ببر متد های EventEmitter رو داخل کلاس خودمون یه متد buy گزاشتیم که ایمیل خریدارو مبلغی که پرداخت کردند برای بلیط رو بفرستیم واسشون بعدش عرضه کردن بلیط رو یکی کاهش میدیم :/ بعدشم صادرش کردیم

خب تو فایل بعدیمون require میکنیم و ازش یک نمونه میسازیم و به تعداد بلیط هایی ک داریم بهش مقدار میدیم

const TicketManager = require(&quot./ticketManager&quot);

const ticketManager = new TicketManager(10);

ticketManager.on(&quotbuy&quot, () => {
    console.log(&quotSomeone bought a ticket!&quot);
});



حالا وقتشه رویدادمون ران بشه

ticketManager.buy("test@email.com", 20);



خب خروجی جالب شد

Someone bought a ticket!



به همین راحتی هربار که buy رو مقداریم یعنی اینکه یه نفر بلیط مارو خریده و ارزش بلیط هارو کم میکنیم یسری متد داخل کدامون بود ک همشو توضیح میدیم

  • emitter.addListener(event, listener) برای رویدادی که مشخص کردیم یک شنونده اضافه می کند
  • emitter.on(event, listener) این متد هم دقیقا کاربرد بالا رو دارد وهمچینن چک نمی کند که ایا شنونده هست یا نه
  • emitter.on(event, listener) یک شنونده را یک بار برای این رویداد اجرا می کند



خیلی زیاد هستن نمیشه همشونو گفت خودتون برید R&D ، امیدوارم حداقل باعث بشه اینا یه سطح اشنایی داشته باشید سوتی بود بگید ناراحت نمیشم : )))


منابع :

https://www.tutorialsteacher.com/nodejs/nodejs-eventemitter

https://nodejs.org/api/events.html#events_events