Xử lí callback hell trong Javascript

Welcome to callback hell

Code kiểu chọc mù mắt như thế này gọi là "callback hell"!

function foo(cb) {
    cb();
}
function bar(cb) {
    cb();
}
function olala(cb) {
    cb();
}

function do_it(){
    foo(function() {
        bar(function() {
            olala(function() {
                console.log("aizz.... ==!");
            })
        })
    })
}

"Để tránh callback hell, hãy sử dụng Promise...."

Ờ vậy thì ... welcome to Promise Hell

foo()
  .then((something) => {
    return bar(something)
      .then((something) => {
        return olala(something);
      });
  });

Promise được tạo ra không phải chỉ để xử lí callback hell mà là để khắc phục các thiếu sót của callback (còn tiếp). Sử dụng promise để xử lí callback hell mà không hiểu rõ bản chất sẽ mang lại code không kém phần tởm lợm như trên. Vậy thì phải làm sao?

Code cho sạch vô

....

function code_sach_dep() {
    foo(thenBar);
}

function thenBar() {
    bar(thenOlala);
}

function thenOlala() {
    olala(function() {
        console.log("done!");
    })
}

Túm lại

Anh em có thể xử lí callback hell bằng cách viết code sạch sẽ tuần tự, thay vì lồng các function nối tiếp nhau.

Thanks for reading!