Ví dụ về Callback trong NodeJS

Ví dụ về Callback trong NodeJS là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Ví dụ về Callback trong NodeJS sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và NodeJS nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Trong bài viết này mình sẽ giới thiệu về khái niệm callback trong Nodejs, đồng thời chúng ta sẽ cùng nhau đi tìm hiểu về ứng dụng của callback trong dự án NodeJS thực tế như thế nào? Đây cũng là một phần khá quan trọng khi chúng ta lập trình với NodeJS.

NodeJS có khả năng xử lý đồng thời rất nhiều tác vụ đồng thời và thời gian phản hồi nhanh, mọi hàm trong NodeJS là bất đồng bộ (asynchronous) do đó mọi tác vụ được xử lý ở chế độ nền (background processing) và NodeJS cũng cung cấp cho chúng ta callback function để nhận kết quả khi hoàn tất.

1. Callback trong NodeJS là gì ?

Khái niệm về callback trong NodeJS cũng tương tự như khái niệm về callback trong javascript vì NodeJS sử dụng Google V8 JavaScript engine để thực thi mã và phần lớn các module được viết bằng javascript. Các bạn có thể hiểu đơn giản rằng callback function được gọi khi đã hoàn thành một tác vụ cụ thể nào đó.

Tất cả các API mà NodeJS cung cấp đều được hỗ trợ callback, từ đó giúp NodeJS có khả năng mở rộng cao hơn. Đến đây các bạn chắc cũng hơi mơ hồ, mình sẽ đưa ra một tình huống thực tế nhé !

Ví dụ về Callback trong NodeJS


Bạn gọi điện hẹn cô gái đi chơi, cô ta đang bận và sẽ trả lời bạn trong 30 phút nữa , trong thơi gian 30 phút đó bạn có thể đi tắm hay làm bất cứ gì khác và không cần bận tâm gì đén cô gái. Cho đến khi bạn nhận lại được cuộc gọi của cô gái (callback). Môt ví dụ khá đơn giản nhưng có lẽ với nó bạn cũng đã hình dung cách mà callback function trong NodeJS hoạt động ra sao ?

2. Một số vị dụ về Callback trong NodeJS

Chúng ta sẽ cùng nhau tìm hiểu về các API của NodeJS hỗ trợ callback thông qua ví dụ kinh điển về đọc file trong NodeJS, trong module FS trong NodeJS cung cấp cho chúng ta rất nhiều API hữu ích như readFileSync(), readFile(),writeFile(), writeFileSync()... cho phép chúng ta làm việc với một file.

Blocking trong NodeJS

Như đã đề cập đến ở trên NodeJS cung cấp cho chúng ta các API trong quá trình làm việc, hàm readFileSync() trong module FS của NodeJS là một hàm đồng bộ (synchronous) và nó sẽ chặn các tác vụ tiếp theo cho đến khi nó đã được hoàn thành.

Trước tiên chúng ta sẽ tạo file Hoidapcode.txt có nội dung như sau :

  Hoidapcode.com - Lập trình ReactJS căn bản 

Tiếp theo, tạo file blocking.js có đoạn code sau:

//Khai báo thư viện FS của NodeJS
const fs = require('fs') 
//Đọc file bằng hàm readfileSync
const filedata = fs.readFileSync('hoidapcode.txt') 
//In ra nội dung của file
console.log(filedata.toString()); 
//In ra dòng kết thúc chương trình
console.log('Kết thúc chương trình') 

Tiến hành chạy file bằng cách mở terminal và chạy dòng lệnh :

  node blocking.js 

Chúng ta sẽ nhận được kết quả như hình :

Ví dụ về Callback trong NodeJS

Ta nhận thấy khi sử dụng các hàm đồng bộ (synchronous) chương trình sẽ chạy câu lệnh theo thứ tự từ trên xuống dưới, khi chạy đến hàm readfileSync() chương trình sẽ đợi nó hoàn thành thì mới thực vụ các tác vụ tiếp theo. Đây được gọi là khái niệm blocking trong lập trình NodeJS

Non-Blocking trong NodeJS

Non-blocking thực hiện ngược lại với blocking mà mình đã nhắc đến ở trên, sử dụng các hàm bất đồng bộ (asynchronous) và khái niệm về callback thể hiện rõ nhất trong ví dụ ở phần này. Mình sẽ sử dụng hàm readFile() trong module FS của NodeJS để minh họa ví dụ cho bạn nhé !

Chúng ta sẽ tạo một file có nên Hoidapcode.txt có nội dung

  Xin chào bạn đến với Hoidapcode.com 

Tiếp theo, tao file nonblocking.js có đoạn code sau:

//Khai báo thư viện FS của NodeJS
const fs = require('fs') 
//Callback Function
const callbackReadFile = function (err, filedata) {   
    if (err) return console.error(err);   
    console.log(filedata.toString());   
}
//Đọc file bằng hàm readFile
fs.readFile('hoidapcode.txt', callbackReadFile);  
 
console.log('Kết thúc chương trình') 

Tiến hành chạy file bằng cách mở terminal và chạy dòng lệnh :

  node nonblocking.js 

Chúng ta sẽ nhận được kết quả như hình :

Ví dụ về Callback trong NodeJS

Câu lệnh console.log('Kết thúc chương trình') được khai báo sau hàm đọc file tại sao lại in ra đầu tiên ? Đến đây bạn chắc hẳn cũng thắc mắc về điều đó ? Vì hàm readFile là một hàm bất đồng bộ (asynchronous) và trả về một callback là function callbackReadFile. callbackReadFile sẽ được gọi khi chương trình đọc file xong.

Nó được gọi là một callback function nhận giá trị của hàm bất đồng bộ trả về khi nó hoàn thành. Trong chương trình này hàm fs.readfile() có thời gian hoàn thành tác vụ lâu hơn hàm console.log() nên nó sẽ được hoàn thành sau và trả về một callback function.

Bạn có thể thấy với hai ví dụ trên đã giải thích khá rõ về blocking và none-blocking, ở ví dụ đầu tiên các tác vụ đợi nhau hoàn thành còn ví dụ thứ 2 hoàn toàn ngược lại. Nó không đợi các tác vụ hoàn thành rồi mới thực thi câu lệnh tiếp theo mà đợi callback function.

Ví dụ thứ hai cũng là đại diện rõ nhất về callback trong NodeJS. Mong rằng bài viết sẽ giúp bạn tìm hiểu rõ hơn về khái niệm này trong lập trình NodeJS.

Hy vọng với bài viết về Ví dụ về Callback trong NodeJS đã giải đáp giúp bạn phần nào về kiến thức lập trình NodeJS. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!