Node.js - Khái niệm Callbacks

Gọi lại là gì?

Gọi lại là một hàm tương đương không đồng bộ cho một hàm. Một hàm gọi lại được gọi khi hoàn thành một nhiệm vụ nhất định. Node sử dụng nhiều lệnh gọi lại. Tất cả các API của Node được viết theo cách mà chúng hỗ trợ các lệnh gọi lại.

Ví dụ, một hàm đọc tệp có thể bắt đầu đọc tệp và trả lại điều khiển cho môi trường thực thi ngay lập tức để lệnh tiếp theo có thể được thực hiện. Khi quá trình nhập / xuất tệp hoàn tất, nó sẽ gọi hàm gọi lại trong khi chuyển hàm gọi lại, nội dung của tệp dưới dạng tham số. Vì vậy, không có việc chặn hoặc chờ đợi File I / O. Điều này làm cho Node.js có khả năng mở rộng cao, vì nó có thể xử lý một số lượng lớn các yêu cầu mà không cần đợi bất kỳ hàm nào trả về kết quả.

Ví dụ về mã chặn

Tạo một tệp văn bản có tên input.txt với nội dung sau -

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Tạo một tệp js có tên main.js với mã sau -

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

console.log(data.toString());
console.log("Program Ended");

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

$ node main.js

Xác minh đầu ra.

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Program Ended

Ví dụ về mã không chặn

Tạo một tệp văn bản có tên input.txt với nội dung sau.

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Cập nhật main.js để có mã sau:

var fs = require("fs");

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

console.log("Program Ended");

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

$ node main.js

Xác minh đầu ra.

Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Hai ví dụ này giải thích khái niệm cuộc gọi chặn và không chặn.

  • Ví dụ đầu tiên cho thấy rằng chương trình chặn cho đến khi nó đọc tệp và sau đó chỉ nó tiếp tục kết thúc chương trình.

  • Ví dụ thứ hai cho thấy chương trình không đợi đọc tệp và tiến hành in "Chương trình đã kết thúc" và đồng thời, chương trình không chặn vẫn tiếp tục đọc tệp.

Vì vậy, một chương trình chặn thực thi rất nhiều theo trình tự. Từ quan điểm lập trình, việc thực hiện logic sẽ dễ dàng hơn nhưng các chương trình không chặn không thực thi theo trình tự. Trong trường hợp một chương trình cần sử dụng bất kỳ dữ liệu nào để xử lý, thì dữ liệu đó nên được giữ trong cùng một khối để thực hiện tuần tự.