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
Hoctv 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ả:
Hoctv 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:
Hoctv 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 Hoclaptrinh 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.
Loạt bài hướng dẫn học NodeJS là gì cơ bản và nâng cao của chúng tôi dựa trên nguồn tài liệu của: Tutorialspoint và W3Schools