chào mấy anh em mới học js đọc xong khái niệm về asyn em khá mơ hồ về cách nó thực thi code ạ , theo như tìm hiểu thì js chỉ hổ trợ single-thread nên asyn được tạo ra nhằm mục đích giúp giảm tổng thời gian thực thi các tác vụ mà ko cần tạo ra luồng mới ,
https://viblo.asia/p/hieu-ve-asynchronous-javascript-RQqKLARmZ7z
http://mahpahh.com/vong-lap-su-kien-trong-javascript
em đọc qua 2 blog này thì thấy người ta hay sử dụng hàm settimeout để làm ví dụ minh họa , nhưng trong thực tế thay 1 hàm khác không phải là settimeout thì nó lại chạy không đúng với mong đợi của em các anh có thể giải thích hộ em
vd:
function doHomework(subject, callback) {
console.log(`Starting my ${subject} homework.`);
callback();
}
console.log('Hello World');
doHomework('math', function() {
while (true){}
})
console.log('End Code');
khi chạy đoạn code trên điều em mong đợi là : sẽ xuất ra hello world , end code và callback kia sẽ chạy vòng lặp vô hạn mà ko ảnh hưởng đến các hàm phía dưới
nhưng thực tế thì nó chỉ xuất ra hello word , Starting my math homework. mà ko xuất ra end code , vậy ko đúng với mong đợi là bất đồng bộ giúp thực thi nhiều tác vụ đồng thời
xong em cho settimeout vào
vd:
function doHomework(subject, callback) {
console.log(`Starting my ${subject} homework.`);
setTimeout(function () {
callback();
}, 0);
}
console.log('Hello World');
doHomework('math', function() {
while (true){}
})
setTimeout(function () {
console.log('run after 3s');
}, 3000);
console.log('End Code');
lần này thì code lại chạy ra Hello World,End Code rồi chạy trong vô tận khác với mong đợi của em là Hello World,End Code , run after 3s , chạy vô tận
ở ví dụ trên thì em dùng vòng lặp vô tận để đại diện cho 1 tác vụ trong thực tế có thời gian thực thi là rất lâu thì các callback hoặc câu lệnh khác cũng phải chờ tác vụ đó chứ có được thực thi bất đồng bộ đâu nhỉ ?