07/09/2018, 10:32

Callback Là Gì

Trong ngôn ngữ javascript, khái niệm callback được sử dụng nhiều với sự phát triển của Ajax. Trong Nodejs, callback lại trở lên vô cùng quan trọng khi hầu hết các tính năng quan trọng trong ngôn ngữ này đều sử dụng callbak. Trong bài viết này chúng ta cùng nhau tìm hiểu về khái niệm cũng như cách ...

Trong ngôn ngữ javascript, khái niệm callback được sử dụng nhiều với sự phát triển của Ajax. Trong Nodejs, callback lại trở lên vô cùng quan trọng khi hầu hết các tính năng quan trọng trong ngôn ngữ này đều sử dụng callbak. Trong bài viết này chúng ta cùng nhau tìm hiểu về khái niệm cũng như cách sử dụng callback.

Callback Là Gì

Callback chỉ là một hàm của javascript tuy nhiên khác với các hàm thông thường khác hàm callback không được gọi một cách trực tiếp mà chỉ khi có một sự kiện nào đó diễn ra thì chúng mới được thực thi.

Lấy một ví cụ thể trong javascript như sau:

// Hiển thị hộp thoại popup khi người dùng click vào một nút bấm
$("#button").click(function() {
  alert("Ối đau quá, anh click nhẹ thôi chứ!!!");
});

Ở ví dụ trên chúng ta muốn người dùng khi click vào một nút bấm với id="button" thì trình duyệt sẽ hiển thị một hộp alert. Ở đây khi sử dụng phương thức click() của đối tượng jQuery $("#button") chúng ta đã đăng ký hàm callback:

function() {
  alert("Ối đau quá, anh click nhẹ thôi chứ!!!");
}

Hàm callback trên không có tên và chỉ được gọi khi sự kiện click vào nút bấm với id cho trước được xảy ra. Bây giờ chúng ta lấy một ví dụ khác trong Node.js như sau:

var fs = require("fs");
fs.readFileSync("van_ban.txt", function (err, data) {
   console.log("Kết thúc việc đọc nội dung. Nội dung tập tin: " + data);
});
console.log("Đang đọc nội dung tập tin...");

Trong ví dụ trên, chúng ta sử dụng thư viện dùng làm việc với file system có sẵn trong Node.js để đọc nội dung một tập tin văn bản van_ban.txt:

var fs = require("fs");

Đối tượng fs được tạo ra cung cấp phương thức readFileSync dùng để đọc nội dung tập tin và trong phương thức này chúng ta chuyển vào giá trị đầu tiên là tên của tập tin cần đọc nội dung và đối số thứ 2 là hàm callback được gọi khi việc đọc nội dung tập tin kết thúc:

fs.readFileSync("van_ban.txt", function (err, data) {
   console.log("Nội dung tập tin: " + data);
});

Bạn lưu ý hàm callback này chỉ được gọi khi sự kiện đọc nội dung tập tin đã kết thúc. Do đó thông thường (nhưng không phải lúc nào cũng vậy) đoạn văn bản có trong câu lệnh console.log thứ 2 trong đoạn mã trên sẽ được hiển thị trước:

Đang đọc nội dung tập tin....

Callback Trong Các Ngôn Ngữ Khác

Callback không phải là khái niệm chỉ được sử dụng trong Javascript mà còn được nhiều ngôn ngữ khác sử dụng. Ví dụng trong PHP chúng ta có một khái niệm tương tự còn được gọi là Callable. Tuy nhiên vì PHP không phải là ngôn ngữ sự kiện nên cách sử dụng có hơi khác một chút. Ví dụ đơn giản như sau:

<?php
function my_callback_function() {
    echo "Đang buồn đang chán ai tán yêu luôn";
}

call_user_func('my_callback_function'); // "Đang buồn đang chán ai tán yêu luôn"

Tuy nhiên với cách sử dụng trên khá đơn giản và chưa khai thác được tính hững dụng của callback. Trong bài viết tiếp theo tôi sẽ đi sâu hơn về cách khai thác sự hữu dụng của callback trong PHP.

0