0

Micro queue trong Javascript

  1. 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() {});
  1. 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ì?
    1. 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.
  1. 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

Đang tải thêm bình luận...
Avatar
0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí