Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 14: Event trong node.js

Node.js là một ngôn ngữ thích hợp để xây dựng các ứng dụng thiên về hướng sự kiện. Nhưng mọi người đã biết thì node.js là một ứng dụng đơn luồng (single - threaded), nhưng chúng ta cũng có thể khác phục điều đó qua các callback và điều đó được thể hiện rõ nhất qua các event loop.

1, Event Loop.

-Node.js sử dụng rất nhiều sự kiện, nên đó cũng là 1 trong các yếu tố khiến cho node.js thực thi nhanh hơn các ngôn ngữ khác. Khi node.js bắt đầu chạy thì nó hoàn toàn chưa có gì xảy ra, cho đến khi nó bắt được các sự kiện thì nó mới thực thi code cho từng sự kiện và các sự kiện đó có thể sẽ lặp đi lặp lại trong suốt quá trình thực thi ứng dụng.

Thêm sự kiện.

-Để sử dụng được event trong Node.js thì chúng ta cần phải require module event và khởi tạo đối tượng eventEimitter.

Cú Pháp:

//Require module event
var event = require('events');
//Khởi tạo đối tượng eventEmitter
var eventEmitter = new event.EventEmitter();

-Bây giờ khi muốn thêm một sự kiện mới thì chúng ta sẽ sử dụng phương thức on theo cú pháp sau:

on(eventName, handleEvent);

Trong đó:

  • eventName  - Là tên của sự kiện bạn muốn thêm.
  • handleEvent - là hàm xử lý khi eventName được gọi. handleEvent có thể là một callbackfunction hoặc là một hàm ẩn danh (closure function).

VD1: Thêm sự kiện connection với handle là closure function.

var event = require('events');
var eventEmitter = new event.EventEmitter();
eventEmitter.on('connection', function () {
    console.log('connection successful');
});

VD2: Như VD1 nhưng handle lúc này là 1 callback.

var event = require('events');
var eventEmitter = new event.EventEmitter();

var connectionHandle = function () {
    console.log('connection successful');
}
eventEmitter.on('connection', connectionHandle );

VD3: Thêm sự kiện có data truyền theo.

var event = require('events');
var eventEmitter = new event.EventEmitter();

var connectionHandle = function (data) {
    console.log('connection successful' + data);
}
eventEmitter.on('connection', connectionHandle );

Thực thi sự kiện

-Sau khi đã thêm được sự kiện rồi thì khi cần thực thi sự kiện đó bạn chỉ cần sử dụng phương thức emit theo cú pháp sau:

emit(evenName[,...args]);

Trong đó:

  • eventName là sự kiện bạn muốn thực thi.
  • args là các tham số mà bạn muốn truyền vào sự kiện.

VD4: Thực thi sự kiện event ở VD1, VD2.

var event = require('events');
var eventEmitter = new event.EventEmitter();

var connectionHandle = function () {
    console.log('connection successful');
}
eventEmitter.on('connection', connectionHandle );
//thực thi sự kiện
eventEmitter.emit('connection');

Kết Quả:

connection successful

VD5: Thực thi sự kiện ở VD3 và truyền kèm theo data.

var event = require('events');
var eventEmitter = new event.EventEmitter();

var connectionHandle = function (data) {
    console.log('connection successful' + data);
}
eventEmitter.on('connection', connectionHandle);
//thực thi sự kiện
eventEmitter.emit('connection', new Date());

Kết Quả:

connection successful Mon Jul 03 2017 12:04:40 GMT+0700 (SE Asia Standard Time)

2, Lời kết.

-Phần này chúng ta tạm kết thúc ở đây. Trong module này còn rất nhiều các đối tượng khác và trong đối tượng này còn rất nhiều các phương thức khác nhưng rất ít được sử dụng, nếu ai cần thì có thể tham khảo tại link.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

2 Comments

VD4 và VD5 giống nhau anh ơi

Zen

7 năm trước

Cảm ơn bạn đã feedback, mình đã sửa lại rồi ạ!

Vũ Thanh Tài

7 năm trước

Bình luận

Captcha