AZCode.vn AZCode

Khái niệm Callbacks trong Node.js

Callback là gì ?

Callback có tính chất không đồng bộ tương đương cho một hàm. Một hàm callback được gọi khi hoàn thành một nhiệm vụ cụ thể. Tất cả các API của Node đều được viết theo các cách của hàm callback.

Ví dụ, một hàm để đọc file bắt đầu với việc đọc file và trả về phần điều khiển để môi trường thực hiện quyết định lệnh tiếp theo có thể thực thi. Khi phần I/O (đọc/ghi) file được hoàn thành, nó sẽ gọi về một hàm callback, với nội dung của file là tham số. Do đó sẽ không có blocking hoặc chờ khi đọc/ghi File. Nó làm cho Node.js có hiệu năng cao hơn, như có số lượng request cao hơn mà không cần phải chờ kết quả trả về.

Ví dụ Blocking Code

Tạo một dòng text với tên input.txt với nội dung sau đây

AZCode la trang Web huong dan cac bai lap trinh
hoan toan mien phi cho tat ca moi nguoi!!!!!

Tạo một file js với tên main.js với nội dung sau đây:

var fs = require("fs");

var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("Ket thuc chuong trinh");

Bây giờ chạy lệnh sau để xem kết quả:

$ node main.js

Kết quả:

AZCode la trang Web huong dan cac bai lap trinh
hoan toan mien phi cho tat ca moi nguoi!!!!!
Ket thuc chuong trinh

Ví dụ Non-Blocking Code

Tạo một file với tên input.txt với nội dung sau đây:

AZCode la trang Web huong dan cac bai lap trinh
hoan toan mien phi cho tat ca moi nguoi!!!!!

Cập nhật main.js với dòng code sau:

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("Ket thuc chuong trinh");

Bây giờ chạy main.js để xem kết quả:

$ node main.js

Kết quả:

Ket thuc chuong trinh
AZCode la trang Web huong dan cac bai lap trinh
hoan toan mien phi cho tat ca moi nguoi!!!!!

Hai ví dụ trên giải thích định nghĩa cách gọi blocking và non-blocking. Ví dụ đầu tiên chỉ ra rằng chương trình khóa cho đến khi nó đọc file và chỉ tiếp tục chạy vài giây sau đó, chương trình thứ 2 không đợi cho việc đọc file và tiếp tục in "Ket thuc chuong trinh" cùng thời điểm thực hiện chương trình.

Các bài học NodeJS phổ biến khác tại AZCode: