Hướng dẫn callback nodejs - gọi lại nodejs

Hướng dẫn callback nodejs - gọi lại nodejs
Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người. Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất. Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.

Hướng dẫn callback nodejs - gọi lại nodejs
Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới. Facebook
Hướng dẫn callback nodejs - gọi lại nodejs
Facebook

1- Callback là gì?

Để giải thích Callback là gì chúng ta hãy xem một tình huống như sau: Callback là gì chúng ta hãy xem một tình huống như sau:

Bạn tới một cửa hàng để mua một món đồ mà bạn yêu thích, nhân viên cửa hàng nói với bạn rằng hiện tại món đồ đó đã hết, bạn để lại số điện thoại và yêu cầu họ gọi lại ngay sau khi có hàng. Sau đó bạn có thể đi chơi hoặc làm một công việc nào đó và không cần quan tâm tới cửa hàng đó nữa, cho tới khi bạn nhận được điện thoại thông báo của hàng đã có món đồ mà bạn yêu thích.

Hướng dẫn callback nodejs - gọi lại nodejs

Máy chủ NodeJS có thể nhận rất nhiều các yêu cầu (request) từ rất nhiều người dùng. Vì vậy để nâng cao khả năng phục vụ, tất cả các API của NodeJS được thiết kế hỗ trợ Callback. "callback" là môt hàm (function), nó sẽ được gọi khi NodeJs hoàn thành một tác vụ (task) cụ thể. NodeJS có thể nhận rất nhiều các yêu cầu (request) từ rất nhiều người dùng. Vì vậy để nâng cao khả năng phục vụ, tất cả các API của NodeJS được thiết kế hỗ trợ Callback. "callback" là môt hàm (function), nó sẽ được gọi khi NodeJs hoàn thành một tác vụ (task) cụ thể.

2- Ví dụ NodeJS Callback

Trong NodeJS các API được thiết kế để hỗ trợ Callback. Giả sử rằng bạn đang viết một chương trình để đọc 2 tập tin. Để làm việc này bạn sử dụng module fs, nó cung cấp cho bạn 2 hàm để đọc file là readFile và readFileSync. Chúng ta sẽ tìm hiểu sự khác biệt giữa 2 hàm này. NodeJS các API được thiết kế để hỗ trợ Callback. Giả sử rằng bạn đang viết một chương trình để đọc 2 tập tin. Để làm việc này bạn sử dụng module fs, nó cung cấp cho bạn 2 hàm để đọc file là readFilereadFileSync. Chúng ta sẽ tìm hiểu sự khác biệt giữa 2 hàm này.

Hướng dẫn callback nodejs - gọi lại nodejs

Blocking

readFileSync là một hàm đọc file một cách đồng bộ (synchronous), chính vì vậy trong khi hàm này đang thực thi nó sẽ chặn (block) chương trình thực thi các dòng code tiếp theo. là một hàm đọc file một cách đồng bộ (synchronous), chính vì vậy trong khi hàm này đang thực thi nó sẽ chặn (block) chương trình thực thi các dòng code tiếp theo.

blocking-example.js


var fs = require("fs");

// -----> Read file 1:
console.log("\n");
console.log("Read File 1");

var data1 = fs.readFileSync('C:\\test\\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.readFileSync('C:\\test\\file2.txt');
console.log("- Data of file 2: ");
console.log(data2.toString());


console.log("\n");
console.log("Program Ended");
 

Mở cửa sổ CMD và thực thi tập tin blocking-example.js. CMD và thực thi tập tin blocking-example.js.



node callback-examples/blocking-example.js

Và đây là kết quả mà bạn nhận được:

Hướng dẫn callback nodejs - gọi lại nodejs

Non Blocking

Bạn nên sử dụng hàm readFile để đạt được hiệu suất tốt hơn cho chương trình. Hàm này đọc file một cách "không đồng bộ" (asynchronous), nó "không chặn" (non block) chương trình thực thi các dòng code tiếp theo, nói cách khác là chương trình không đợi hàm này hoàn thành. Nhưng khi hàm này thực hiện xong nhiệm vụ của nó, nó sẽ gọi tới hàm Callback. readFile để đạt được hiệu suất tốt hơn cho chương trình. Hàm này đọc file một cách "không đồng bộ" (asynchronous), nó "không chặn" (non block) chương trình thực thi các dòng code tiếp theo, nói cách khác là chương trình không đợi hàm này hoàn thành. Nhưng khi hàm này thực hiện xong nhiệm vụ của nó, nó sẽ gọi tới hàm Callback.



// Read a file Asynchronous.
fs.readFile('C:\\test\\file1.txt', aCallbackFunction );

Xem ví dụ đầy đủ:

non-blocking-example.js


var fs = require("fs");

// A Callback function!
function readFinishedFile1(err, data)  {
   if (err) console.log(err);
   console.log("- Data of file 1: ");
   console.log(data.toString());
}

// A Callback function!
function readFinishedFile2(err, data)  {
   if (err) console.log(err);
   console.log("- Data of file 2: ");
   console.log(data.toString());
}

// -----> Read file 1:
console.log("\n");
console.log("Read File 1");

fs.readFile('C:\\test\\file1.txt', readFinishedFile1);

// -----> Read file 2:
console.log("\n");
console.log("Read File 2");

fs.readFile('C:\\test\\file2.txt', readFinishedFile2);

console.log("\n");
console.log("Program Ended \n");

Mở cửa sổ CMD và chạy tập tin non-blocking-example.js:CMD và chạy tập tin non-blocking-example.js:


node callback-examples/non-blocking-example.js

Và đây là kết quả mà bạn nhận được:

Hướng dẫn callback nodejs - gọi lại nodejs