Tiếp …
2. Synchronous callback
Theo định nghĩa của callback thì nó là một đoạn code được truyền như là tham số tới một đoạn code khác, và sẽ được gọi tại một thời điểm nào đó. Khác với async callback, sync callback sẽ được gọi ngay khi xử lý (thường được gọi vào cuối hàm, function call at the back ^^, nhất là trong lập trình Win32API, thường thì khi cuối hàm, bạn muốn OS làm một magic task nào đó, bạn sẽ viết kiểu generic vậy để lập trình viên có thể chọn: ví dụ như clear RAM, báo thức, …).
Bạn có thể map nó với 1 trường hợp trong thực tế như sau:
Bạn đi vệ sinh, trong lúc đó vì quá rảnh rỗi, bạn muốn tận dụng thời gian làm một cái gì đó nữa, ví dụ như chơi game, xem siếc, … Bạn sẽ define các function này và tuỳ vào context mà gọi nó ra (ví dụ đang chơi CoC thì buồn đi iiiii …, nếu giờ không oánh nữa thì chúng nó cướp hết resource, vậy ta vào và chơi tiếp)
function diWC(i, callbackFn) {
i++; // đếm cừu
callbackFn();
}
function playCoC() {
alert("Chơi tiếp");
}
function seeSiec() {
alert("Xem tiếp");
}
//context: sợ bị cướp tài nguyên
diWC(1, playCoC);
//context: xa vợ lâu ngày
diWC(1, seeSiec);
Cái này được thiết kế khá nhiều trong Java, ví dụ như thực hiện so sánh các phần tử trong ArrayList, bạn truyền 1 callback interface Comparable vào (ArrayList được gọi là high-level layer, còn Comparable được gọi là low-level layer). Bạn thích so sánh kiểu gì thì làm, ArrayList không quan tâm, miễn là sau khi so sánh ta có một ArrayList được sắp xếp. Đây cũng là một design pattern khá thông dụng và được áp dụng nhiều.