Callback là khỉ gì ?

Callback là điệp viên nằm vùng.

Được cài cắm vào các function, có tác dụng mấu chốt trong việc báo cáo kết quả về cho ông chủ.

Em gái bên dưới là callback !

hình không liên quan gì cả

Không như PHP, đặc thù của javascript là không chờ đợi, cho dù là đợi gái đẹp. Khi js gọi 1 function, nó ko chờ function này trả về kết quả, mà tiếp tục chạy vì JS còn trẻ JS muốn đi chơi.

Do đó mà chúng ta cần có callback nằm vùng, để khi gái đẹp trang điểm xong, nằm vùng sẽ gọi ta phi xe đến đón.

Lấy ví dụ con thỏ ăn cỏ chui vào hang.

// con thỏ cần 3s mới ăn cỏ và uống nước xong.
function con_tho_an_co() {
  setTimeout(function() {
    console.log('con thỏ ăn cỏ, uống nước');
  }, 3000);
}

// con thỏ chui vô hang
function hotel() {
  console.log('chui vô hotel');
}

con_tho_an_co();
hotel();

Các bạn sẽ thấy là con thỏ chui ngay vô hotel luôn...

Để đảm bảo con thỏ "làm" việc theo thứ tự, tức là chỉ vào hotel khi đã cơm no rượu say, chúng ta cần con_tho_an_co báo cho chúng ta biết chính xác khi nào nó ăn xong, bằng cách cài điệp viên nằm vùng có mật danh là callback 007.

function con_tho_an_co(callback007) {
  setTimeout(function() {
    console.log('con thỏ ăn cỏ, uống nước');
    callback007(); // đây là lúc điệp viên báo cáo cho sếp !
  }, 3000);
}

// con thỏ chui vô hang
function hotel() {
  console.log('chui vô hotel');
}

// điệp viên nằm vùng callback sẽ gọi hotel luôn dùm con thỏ.
var callback = function() {
  hotel();
}
con_tho_an_co(callback);

hoặc chúng ta có thể viết gọn lại thành

con_tho_an_co(function() {
  hotel();
});

Làm sao chắc rằng điệp viên callback trên kia sẽ báo cáo đúng cho ta biết về con_tho_an_co. Rất đơn giản là thuê thêm 1 điệp viên callback mới theo dõi thằng callback kia. Rồi làm sao chắc callback mới. Vậy thì lại thuê thêm callback mới mới theo dõi callback mới.

Welcome to callback hell.

alt text

Để giải quyết callback hell, anh em chỉ cần code đẹp một tí, chứ cần quái gì Promise. Bọn mẻo chỉ giỏi vẽ chuyện, đẻ hết cái này đến cái khác bắt bố mày học máu mồm.

Anh em nhớ là, khi gặp callback hell thì chúng ta phải giải quyết nó bằng kiến thức và đôi tay tài hoa của một lập trình viên sáng ngủ đêm xem pỏn, chứ cứ nhảy ngay vào học Promise chỉ vì nghe đồn nó giúp tránh callback hell thì anh em sẽ gặp Promise hell, khi đấy thì thôi rồi !

Lấy cái ví dụ chúng ta cần làm việc A, rồi đến việc B rồi việc C, theo thứ tự

function doA(cb) {
  cb();
}

function doB(cb) {
  cb();
}

function doC(cb) {
  cb();
};


// đây là code ko kotex
function main() {
  doA(function(){
    doB(function(){
      doC(function(){
        console.log('lịt pẹ mệt vl'); 
      });
    });
  });
}

Code như đấm vào mồm như trên gọi là callback hell, hay còn dc gọi là pyramid of doom hay ít dc biết hơn với cái tên hadouken - game này chắc ai cũng biết !

alt text

Kotexcode

Kotexcode nói : code là phải khô thoáng và sạch sẽ

function kotexcode() {
  doA(thenB); // làm A xong làm B
}

// sau đó viết 
function thenB() {
  doB(thenC)
}

// cuối cùng
function thenC() {
  doC(function(){
    // đến đây là xong
    console.log('ahihi đồ ngốc !'); 
  });
}

Các anh em hãy nhớ đừng code theo kiểu hadouken nhé, bởi vì code là phải khô thoáng và sạch sẽ mà.

Bonus cái hình kotexcode do clgtart vẽ.

alt text

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

quocnguyen

19 bài viết.
1133 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
182 58
(Ảnh) Việt nam như các anh em cũng biết là đất nước con rồng cháu tiên với nghề làm web truyền thống chỉ xoay quanh web nhạc, web phim, web tin tứ...
quocnguyen viết hơn 1 năm trước
182 58
White
158 66
(Ảnh) Động lực Đối với nghề lập trình viên thần thánh, nếu một sớm mai thức dậy anh em cảm thấy ko có bất kì động lực nào để tỉnh, chỉ muốn ngủ ...
quocnguyen viết hơn 1 năm trước
158 66
White
115 42
Prototype là hệ thống phân chia quyền lực của giang hồ Sở dĩ ta nói như vậy là vì Khi hỏi object 1 property nào đó, nếu bản thân nó ko làm dc, nó...
quocnguyen viết hơn 2 năm trước
115 42
Bài viết liên quan
White
19 5
Nếu cho tôi 6 tiếng để đốn hạ một cái cây, tôi sẽ dành 4 tiếng đầu tiên để mài rìu. Abraham Lincoln Bạn có thể đọc bài gốc tại (Link) Khi bắt đ...
Đào Văn Hùng viết 8 tháng trước
19 5
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
19 bài viết.
1133 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!