Mã bất đồng bộ với callback trong JavaScript
Giả sử chúng ta có một hàm bất đồng bộ:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Giả sử chúng ta sử dụng hàm này theo cách sau:
make();
console.log('2'); // sẽ thực thi đầu tiên
Giả sử chúng ta muốn thực hiện để lệnh in thứ hai vào console chỉ thực thi sau khi hoạt động bất đồng bộ bên trong hàm hoàn tất.
Một trong những phương pháp được sử dụng cho việc này là dùng callback:
bọc đoạn mã cần chờ vào một hàm ẩn danh và truyền nó làm tham số cho hàm make:
make(function() {
console.log('2');
});
Tất nhiên, bản thân việc này sẽ không giải quyết được vấn đề của chúng ta. Hiện tại chúng ta chỉ mới thiết lập một thỏa thuận: nếu muốn thực thi mã sau khi make chạy xong, hãy truyền mã đó dưới dạng callback vào lời gọi make.
Hãy sửa mã hàm make để nó bắt đầu hoạt động theo thỏa thuận của chúng ta:
function make(callback) {
setTimeout(function() {
console.log('1'); // một hoạt động bất đồng bộ nào đó, có thể không chỉ một
callback(); // sau đó là callback của chúng ta
}, 3000);
}
Hãy cho biết thứ tự các số sẽ được in ra console:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});