Dark mode
events
events เป็นโมดูลในตัวของ Node.js ที่ใช้สำหรับการจัดการและสร้าง Event Emitters
import { EventEmitter } from 'node:events';
API | คำอธิบาย | ลักษณะ | คำอธิบายเพิ่มเติม |
---|---|---|---|
emitter.on() | ฟังก์ชันสำหรับรับฟัง event | Asynchronous | กำหนด callback เมื่อเกิด event |
emitter.once() | รับฟัง event เพียงครั้งเดียว | Asynchronous | ลบ listener อัตโนมัติหลังเรียกครั้งแรก |
emitter.emit() | ส่ง event | Synchronous | เรียก listener ทั้งหมดที่เกี่ยวข้องกับ event นั้น |
emitter.off() | หยุดรับฟัง event | Synchronous | ลบ listener ที่กำหนด |
emitter.removeAllListeners() | ลบ listener ทั้งหมด | Synchronous | ลบทุก listener สำหรับ event ที่กำหนดหรือทั้งหมด |
emitter.eventNames() | ดูรายการ event ทั้งหมด | Synchronous | คืนค่า array ของชื่อ event ที่มี listener อยู่ |
ตัวอย่าง
การสร้าง EventEmitter พื้นฐาน
js
import { EventEmitter } from "events";
// สร้าง emitter ใหม่
const emitter = new EventEmitter();
// กำหนด listener สำหรับ event 'greet'
emitter.on("greet", (name) => {
console.log(`สวัสดี ${name}`);
});
// ส่ง event 'greet'
emitter.emit("greet", "สมชาย");
การใช้ once() สำหรับ event ครั้งเดียว
js
import { EventEmitter } from "events";
const emitter = new EventEmitter();
// กำหนด listener ที่ทำงานเพียงครั้งเดียว
emitter.once("login", (user) => {
console.log(`User ${user} logged in (first time only)`);
});
// ส่ง event หลายครั้ง
emitter.emit("login", "user1");
emitter.emit("login", "user2"); // จะไม่แสดงผล
การจัดการ error event
js
import { EventEmitter } from "events";
const emitter = new EventEmitter();
// กำหนด listener สำหรับ error
emitter.on("error", (err) => {
console.error("เกิดข้อผิดพลาด:", err.message);
});
// ส่ง error event
emitter.emit("error", new Error("Something went wrong"));
การสร้างคลาสที่สืบทอดจาก EventEmitter
js
import { EventEmitter } from "events";
class MyEmitter extends EventEmitter {
constructor() {
super();
this.counter = 0;
}
increment() {
this.counter++;
this.emit("incremented", this.counter);
}
}
// ใช้งาน
const myEmitter = new MyEmitter();
myEmitter.on("incremented", (count) => {
console.log("ค่าใหม่:", count);
});
myEmitter.increment();
myEmitter.increment();
การลบ listener
js
import { EventEmitter } from "events";
const emitter = new EventEmitter();
function listener(data) {
console.log("ข้อมูล:", data);
}
// เพิ่ม listener
emitter.on("data", listener);
// ส่ง event
emitter.emit("data", "ข้อมูลแรก");
// ลบ listener
emitter.off("data", listener);
// ส่ง event อีกครั้ง (จะไม่มีผล)
emitter.emit("data", "ข้อมูลที่สอง");
การตรวจสอบ listener
js
import { EventEmitter } from "events";
const emitter = new EventEmitter();
emitter.on("start", () => console.log("เริ่มทำงาน"));
emitter.on("end", () => console.log("สิ้นสุดการทำงาน"));
// ตรวจสอบจำนวน listener
console.log("start listeners:", emitter.listenerCount("start"));
console.log("end listeners:", emitter.listenerCount("end"));
// ดูชื่อ events ทั้งหมดที่มี listener
console.log("Event names:", emitter.eventNames());
การส่งหลาย arguments
js
import { EventEmitter } from "events";
const emitter = new EventEmitter();
emitter.on("message", (sender, message, timestamp) => {
console.log(`[${timestamp}] ${sender}: ${message}`);
});
// ส่ง event พร้อมหลาย arguments
const now = new Date().toISOString();
emitter.emit("message", "admin", "Hello everyone", now);
การตั้งค่า max listeners
js
import { EventEmitter } from "events";
const emitter = new EventEmitter();
// ตั้งค่าจำนวน listener สูงสุด (เพื่อหลีกเลี่ยง memory leak)
emitter.setMaxListeners(20);
// เพิ่มหลาย listeners
for (let i = 0; i < 15; i++) {
emitter.on("event", () => console.log(`Listener ${i}`));
}
console.log("Current max listeners:", emitter.getMaxListeners());