EVENTS NODEJS

Events

Aplikasi Node.js biasanya dikenal memiliki pola event-driven atau memiliki alur berdasarkan suatu kejadian. Apa maksudnya itu? Mari kita jelajahi lebih dalam lagi.

Kejadian terjadi di dunia nyata. Alarm berbunyi, ponsel berdering, dan kejadian lainnya. Sebagai manusia, kita cepat membuat keputusan dan bertindak sesuai dengan apa yang terjadi. Contohnya, ketika kita berjalan dan tiba-tiba turun hujan, kita segera menggunakan payung; ketika telepon berdering, kita mengangkat panggilan; dan ketika kita lapar, kita makan. Selama bertahun-tahun, kita telah bertahan dengan pola ini, karena itulah faktanya. Inilah yang dimaksud dengan pola event-driven.

Kita kembali ke dunia komputer. Programing biasanya dilakukan secara imperatif. Kita perlu menulis banyak instruksi secara runtut dan rinci agar komputer dapat melakukan sesuatu. Komputer akan membaca kode dari atas ke bawah sesuai dengan urutan yang telah kita tetapkan.

Kita akan sulit membangun program yang dapat menangani insiden karena polanya yang kaku. Bagaimana kita bisa memberi tahu komputer kapan suatu peristiwa akan terjadi? Bagaimanakah solusinya? Dalam dunia nyata, program komputer juga harus bekerja dengan pola yang digerakkan oleh pola event-driven. Syukurlah bahwa pola tersebut dapat diterapkan dengan mudah oleh Node.js.

Node.js menyediakan EventEmitter class yang merupakan member events core module:

const { EventEmitter } = require('events');
 
const myEventEmitter = new EventEmitter();

Setiap instance dari EventEmitter akan memiliki fungsi on. Pada fungsi tersebut, kita dapat menentukan aksi berdasarkan sebuah kejadian. Contohnya seperti ini:

const { EventEmitter } = require('events');
 
const myEventEmitter = new EventEmitter();
 
// fungsi yang akan dijalankan ketika event coffee-order terjadi
const makeCoffee = ({ name }) => {
    console.log(`Kopi ${name} telah dibuat!`);
};
 
// mendaftarkan fungsi makeCoffee sebagai listener event coffee-order
myEventEmitter.on('coffee-order', makeCoffee);

Fungsi on menerima dua buah argumen, yang pertama adalah nama event dan yang kedua adalah listener atau fungsi yang akan dieksekusi ketika event terjadi. Dari kode di atas, jika terjadi event ‘coffee-order’, maka fungsi makeCoffee akan dijalankan.

"Kita bebas menentukan nama event yang diberikan pada argumen fungsi on. Jika nama event lebih dari dua kata, latihan terbaiknya adalah memisahkannya dengan tanda garis (-) bukan menggunakan spasi."


Lantas bagaimana cara membangkitkan suatu event? Setiap instance dari EventEmitter juga memiliki fungsi emit() yang berguna untuk membangkitkan event.

const myEventEmitter = new EventEmitter();
 
const makeCoffee = ({ name }) => {
    console.log(`Kopi ${name} telah dibuat!`);
};
 
myEventEmitter.on('coffee-order', makeCoffee);
 
// Memicu event 'coffee-order' terjadi.
myEventEmitter.emit('coffee-order', { name: 'Tubruk' });
 
/**
 * output:
 * Kopi Tubruk telah dibuat!
 */

Fungsi emit() menerima nilai argumen sebanyak apa pun yang kita mau, namun nilai yang pertama merupakan nama dari event yang akan dibangkitkan, argumen kedua dan seterusnya adalah nilai yang akan digunakan untuk menjadi dari parameter fungsi listener.

Kita juga bisa mendaftarkan lebih dari satu fungsi listener pada sebuah event menggunakan fungsi on.

const { EventEmitter } = require('events');
 
const myEventEmitter = new EventEmitter();
 
const makeCoffee = ({ name }) => {
    console.log(`Kopi ${name} telah dibuat!`);
};
 
const makeBill = ({ price }) => {
    console.log(`Bill sebesar ${price} telah dibuat!`);
}
 
myEventEmitter.on('coffee-order', makeCoffee);
myEventEmitter.on('coffee-order', makeBill);
 
myEventEmitter.emit('coffee-order', { name: 'Tubruk', price: 15000 });
 
/**
 * output:
 * Kopi Tubruk telah dibuat!
 * Bill sebesar 15000 telah dibuat!
 */


Atau kita bisa membuat satu fungsi khusus untuk menangani event. Biasanya fungsi ini memiliki nama ‘handler’ atau ‘listener’ pada akhir penamaanya.

const { EventEmitter } = require('events');
 
const myEventEmitter = new EventEmitter();
 
const makeCoffee = (name) => {
    console.log(`Kopi ${name} telah dibuat!`);
};
 
const makeBill = (price) => {
    console.log(`Bill sebesar ${price} telah dibuat!`);
}
 
const onCoffeeOrderedListener = ({ name, price }) => {
    makeCoffee(name);
    makeBill(price);
}
 
myEventEmitter.on('coffee-order', onCoffeeOrderedListener);
 
myEventEmitter.emit('coffee-order', { name: 'Tubruk', price: 15000 });
 
/**
 * output:
 * Kopi Tubruk telah dibuat!
 * Bill sebesar 15000 telah dibuat!
 */


Latihan: Events

Ayo kita latihan apa yang sudah kita pelajari!

Silakan buat folder baru bernama events dan di dalamnya buat berkas JavaScript baru bernama index.js.



Tuliskan starter code berikut di dalam index.js:

// TODO 1
 
const birthdayEventListener = (name) => {
  console.log(`Happy birthday ${name}!`);
}
 
// TODO 2
 
// TODO 3
 
// TODO 4


Wah cukup banyak juga yah TODO yang harus dikerjakan. Simak penjelasanya:

    1. TODO 1 : Buat atau impor variabel EventEmitter dari core module events.

    2. TODO 2 : Buat variabel myEmitter yang merupakan instance dari EventEmitter.

    3. TODO 3 : Tentukan birthdayEventListener sebagai aksi ketika event ‘birthday’ dibangkitkan pada
                          myEmitter.

    4. TODO 4 : Bangkitkanlah event ‘birthday’ pada myEmitter dengan method emit() dan beri nilai
                          argumen listener dengan nama Anda.


Bila Anda selesai mengerjakan TODO yang ada, eksekusi berkas index.js dengan perintah:

node ./events/index.js

Maka console akan menampilkan output seperti berikut:



Posting Komentar

0 Komentar