Phần 5: NodeJS – Khái niệm callbacks – NodeJS căn bản cho người mới bắt đầu

Table of Contents
1. Callback là gì?
Callback có tính chất không đồng bộ tương đương cho 1 hàm. 1 hàm callback được gọi khi hoàn thành 1 nhiệm vụ chi tiết. Toàn bộ các API của Node đều viết theo những cách của hàm callback.
Ví dụ, 1 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ề 1 hàm callback, với nội dung của file là tham số. Do đó sẽ không có blocking hay chờ khi đọc/ghi File. Nó làm Node.js có hiệu năng cao hơn, như có số lượng request cao hơn mà không phải phải chờ kết quả trả về.
2. Ví dụ Blocking Code
Trong NodeJS các API được thiết kế để hỗ trợ Callback. Giả sử rằng bạn đang viết 1 chương trình để đọc 2 file. Để làm việc này bạn sử dụng module fs, nó cung cấp cho các bạn 2 hàm để đọc file là learnFile và learnFileSync. Chúng ta sẽ tìm hiểu điểm khác biệt giữa 2 hàm này.
Tạo 1 file js với tên essential.js với nội dung dưới đây:
var fs = require("fs");
// -----> Read file 1:
console.log("n");
console.log("Read File 1");
var data1 = fs.learnFileSync('C:\take a look at\file1.txt');
console.log("- Data of file 1: ");
console.log(data1.toString());
// -----> Read file 2:
console.log("n");
console.log("Read File 2");
var data2 = fs.learnFileSync('C:\take a look at\file2.txt');
console.log("- Data of file 2: ");
console.log(data2.toString());
console.log("n");
console.log("Program Ended");
Hiện tại chạy lệnh sau để xem kết quả:
$ node essential.js
Kết quả:
3. Ví dụ Non-Blocking Code
Tạo 1 file với tên enter.txt với nội dung dưới đây:
QTM la trang Web huong dan cac bai lap trinh hoan toan mien phi cho tat ca moi nguoi!!!!!
Update essential.js với dòng code sau:
var fs = require("fs");
// A Callback operate!
operate readFinishedFile1(err, information)
if (err) console.log(err);
console.log("- Data of file 1: ");
console.log(information.toString());
// A Callback operate!
operate readFinishedFile2(err, information)
// -----> Read file 1:
console.log("n");
console.log("Read File 1");
fs.learnFile('C:\take a look at\file1.txt', readFinishedFile1);
// -----> Read file 2:
console.log("n");
console.log("Read File 2");
fs.learnFile('C:\take a look at\file2.txt', readFinishedFile2);
console.log("n");
console.log("Program Ended n");
Hiện tại chạy essential.js để xem kết quả:
$ node essential.js
Kết quả:
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 nêu ra rằng chương trình khóa cho tới khi nó đọc file và chỉ tiếp tục chạy vài giây rồi, chương trình thứ 2 không đợi đối với 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.