javascript - Kapan menggunakan eventEmitter di Node js?
Saya sedang mempelajari konsep baru di Node.js yaitu event tetapi saya tidak bisa menemukan di mana seharusnya saya menggunakannya, saya ingin contoh skenario nyata tetapi saya tidak bisa menemukan artikel atau blog tentang ini.
var events = require('events');
var eventEmitter = new events.EventEmitter();
//Create an event handler:
var myEventHandler = function () {
console.log('I hear a scream!');
}
//Assign the event handler to an event:
eventEmitter.on('scream', myEventHandler);
eventEmitter.on('test', function(){
console.log("Testing event");
});
//Fire the 'scream' event:
eventEmitter.emit('scream');
eventEmitter.emit('scream');
eventEmitter.emit('test');
Saya bisa mencapai hal yang sama dengan memanggil fungsi sederhana seperti myEvenHandler()?
Jawaban #1
Ya, dalam kasus Anda Anda bisa langsung memanggil myEventHandler(), tetapi itu adalah contoh yang sederhana. Bayangkan jika Anda ingin mendengarkan berbagai event dari sebuah emitter. Misalnya, dalam pustaka database Mongoose:
mongoose.connect(databaseUrl);
mongoose.connection.on('connected', function () {
//connected successfully
});
mongoose.connection.on('error',function (err) {
//connection error
});
mongoose.connection.on('disconnected', function () {
//disconnected
});
Anda bisa melewatkan 3 callback ke metode connect() tetapi dengan menggunakan EventEmitter Anda memiliki kode yang lebih mudah dibaca (setidaknya, bagi saya) dan itu memungkinkan Anda memiliki beberapa listener di seluruh aplikasi Anda.
Jawaban #2
Ini berguna ketika Anda memiliki hubungan satu ke banyak dalam kode Anda. Misalnya: Satu peristiwa memicu banyak hal terjadi.
Manfaat utama adalah pemisahan kode Anda, Anda dapat mendaftarkan callback pada emitter peristiwa tanpa ia pernah mengetahui apa yang sebenarnya dilakukan oleh callback tersebut. Salah satu contoh di mana saya menggunakan pola ini adalah implementasi kustom dari pola Flux. Dispatcher akan mendapatkan callback yang didaftarkan padanya, dan setiap kali salah satu komponen front-end berubah, Dispatcher akan memancarkan peristiwa pembaruan. (memanggil semua callback yang terdaftar)
