Micro queue trong Javascript
- Phân tích đoạn code sau:
fetch('https://www.google.com')
.then(function a() {});
Promise.resolve()
.then(function b() {});
Promise.reject()
.catch(function c() {});
- Giải thích:
fetch('https://www.google.com')
.then(function a() {});
- Đầu tiên chúng ta phân tích fetch() là gì?
-
- fetch() là một Web API (do trình duyệt cung cấp, không phải bản thân JS engine). Khi gọi fetch(): Nó không chạy trong call stack JS. Nó lập tức gửi request ra mạng và trả về một Promise. Promise này sẽ được resolve khi có phản hồi từ server. Vì vậy fetch() KHÔNG phải là microtask, cũng KHÔNG phải là macrotask. Nó là một lời hứa sẽ resolve trong tương lai, nhưng không nằm trong bất kỳ queue nào ban đầu.
- Kết quả in ra:
Time | Call Stack | Microtask Queue | Macrotask Queue | Output |
---|---|---|---|---|
0ms | fetch() setup | then(b), catch(c) | ||
~1ms | b(), c() | b, c | ||
~??ms | then(a) | a (sau khi fetch hoàn tất) |
All rights reserved
Bình luận