THẢO LUẬN

Avatar
đã bình luận cho bài viết
thg 7 22, 2024 10:51 SA

Bày viết hay, đặt ra nhiều câu hỏi để mình tự suy nghĩ lại.

0

@maitrungduc1410 à em hiểu rồi, cảm ơn anh rất nhiều😍

+1
thg 7 22, 2024 8:47 SA

👍️

+1
thg 7 22, 2024 8:45 SA

👍️

+1

Seris này hay quá bạn ơi, cám ơn bạn vì đã chia sẻ kiến thức hữu ích

+1

về cơ bản cách hoạt động của nó cũng khá giống nhau e ạ, ít nhất là với những kiến thức trong bài.

Đúng là phía NodeJS họ thêm khái niệm "phase" vào. Nhưng những thứ như callstack, micro/macrotask thì kiến thức vẫn share nhau. Vì chúng đều based trên V8 mà e, có những cái core thì vẫn giống

0

Bài viết rất hay ạ. Nhưng em có thắc mắc là Event loop của Javascript và Nodejs khác nhau đúng ko ạ Em có tìm hiểu thì event loop của Nodejs được chia thành 6 phases ạ

0

Hay quá anh ạ! Em chưa bỏ qua bài nào của anh. Mong anh ra bài tiếp theo sớm ạ.

+1

Bài viết quá tuyệt vời, cảm ơn tác giả

0

đoạn này e phải chú ý thật kĩ là ở cái new Promise e đặt await.

Khi e đặt await trước 1 cái Promise, thì Event loop sẽ chờ cho tới khi cái Promise đó được resolve thì nó mới tiếp tục chạy các phần code bên dưới (nhiều blog khác vẫn gọi là nó "pause execution" - dừng thực hiện chờ cho resolve thì mới "resume").

Cụ thể bài của e sẽ như sau:

  • đầu tiên async1(); được gọi -> thực hiện console.log("async1 start");
  • tiếp đó e gọi await async2() -> thực hiện console.log("async2 start")
  • tiếp await new Promise -> thực hiện console.log("async2 promise")
  • sau đó là tới cái setTimeout -> đẩy callback của nó vào Macrotask queue

Tại thời điểm này code sẽ ko chạy tiếp luôn tới console.log("async2 end"), bởi vì như a nói bên trên e đang await Promise, thì Event loop nó sẽ chờ cho Promise resolve.

  • và tại thời điểm này callstack trống, Microtask queue trống, thì Eventloop sẽ lấy job từ Macrotask queue ra thực hiện -> ta có console.log("async2 setTimeout")resolve(), ở đây Promise đã resolve
  • Event loop tiếp tục đưa console.log("async2 end") vào Microtask (vì nó ở sau await). Tại thời điểm này callstack trống, Microtask chỉ có mỗi 1 job vừa đưa vào, vậy nên console.log("async2 end") được lấy ra và thực hiện luôn
  • cuối cùng là console.log("async1 end") cũng được đưa vào Microtask (vì nó sau await), và hiện tại ngoài microtask ra cũng ko còn gì cả, nên nó cũng sẽ được lấy ra và thực hiện

Tổng hợp lại ta có kết quả như sau:

async1 start
async2 start
async2 promise
async2 setTimeout
async2 end
async1 end
0
thg 7 21, 2024 10:08 SA

hay ạ

0
thg 7 21, 2024 9:47 SA

Bài viết hay ngắn gọn, đầy đủ. Nhưng ko biết các update này ở Spring security 6 có lợi ích gì lớn ko ạ ?

0

a cho e hỏi 1 sản phẩm quần đùi có 2 attribute là color và size, mỗi color và size lại có nhiều giá trị vậy thiết kế database như nào cho hợp lí ạ để thí dụ cái quần size L màu đỏ là 1 sản phẩm ạ , em cảm ơn

0
Avatar
đã bình luận cho bài viết
thg 7 21, 2024 5:27 SA

👍️👍️

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í