NodeJS Event Emitter สำคัญฉะไหน

10 February, 2019, By Tar Jarupong

วันนี้เราจะได้รู้กันว่าตัว NodeJS คืออะไร ดียังไง เริ่มได้~~~



Node Event Emitter ?

      ด้วยความที่ว่า NodeJS เองทำงานเป็นแบบ event-driven architecture หรือเรียกแบบไทยๆว่าการขับเคลื่อนทุกอย่างด้วย Event มาถึงตรงนี้ทุกคนคงจะงงว่าแล้วตัว event-driven คืออะไร

      รูปนี้ทุกคนคงเข้าใจ event driven ทุกคนจะเห็นว่ามันคือ Observer design pattern นั้นเองนะครับซึ่งตัว Observer pattern เองเป็นฐานในการทำ event driven ผมขอไม่ลงลึกเรื่อง Observer pattern ง่ายๆก็คือ Observer pattern เอาไว้สำหรับสังเกตุการเปลี่ยนแปลงข้อมูลว่าเปลี่ยนแปลงไปยังไงบ้างนั้นเองครับ

Node Event ใช้งานยังไง ?

มาเริ่มใช้ Event emitter กันเลยครับผมขอวาดภาพว่าเราจะทำ service อะไรด้วย Event Emitter นะครับ

OECu3Yh.png

ผมจะลองเขียนตามนี้นะครับ เริ่ม~~~

#1 ทำการสร้าง require และสร้าง event ตัวนึง

const EventEmitter = require('events');
    const myService = new EventEmitter();



#2 สร้างตัว emit data

// ให้มีการส่งข้อมูลทุกๆ 1 วินาที
  setInterval(()=>{
    myService.emit('registration',{
          name: "Tar",
          email: "Tar@email.com"
       })
  },1000)

ต้องอธิบายก่อนว่าตัว registration คือชื่อ event ครับส่วนตัว object คือข้อมูลที่เราจะส่งผ่านตัว regitration event



#3 สร้างตัว listener สำหรับ email & admin

  // ใครยังไม่เคยใช้ => หรือ arrow function ผมมี ref ไว้ข้างล่างครับ
  // email service
  myService.on('registration', (userData) => {
    console.log("\n\n");
    console.log(`ส่ง email ไปหาคุณ ${userData.name} ไปที่ ${userData.email}`)
  })

  // admin service
  myService.on('registration', (userData)=>{
    console.log(`เจ้านายครับมีลูกค้าสมัครสมาชิก คุณ ${userData.name}$`)
  })



#4 โค๊ดเต็มๆตามนี้เลยครับ

  const EventEmitter = require('events');
      const myService = new EventEmitter();

      setInterval(()=>{
        myService.emit('registration',{
              name: "Tar",
              email: "Tar@email.com"
           })
        },1000)

      myService.on('registration', (userData) => {
        console.log("\n\n");
        console.log(`ส่ง email ไปหาคุณ ${userData.name} ไปที่ ${userData.email}`)
      })


      myService.on('registration', (userData)=>{
        console.log(`เจ้านายครับมีลูกค้าสมัครสมาชิก คุณ ${userData.name}$`)
      })

#5 มาดูผลลัพธ์กันเลยครับ



ก็จบกันไปแล้วนะครับสำหรับ NodeJS Event Emitter แบบพื้นฐานมาก!!!! ผมก็หวังว่าผู้อ่านจะเข้าใจการทำงานและการเขียน Event Emitter นะครับผม วันนี้ผมต้าขอตัวลาไปก่อนชะแว๊บ~~~
ปล. เดี๋ยวจะมาเขียนเพิ่มเติมว่าไปปรับใช้งานยังไงนะครับ ^ _ ^

Ref:

Arrow functions

Event-driven architecture

Observer pattern

Template literals