Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Hàm bất đồng bộ (Asynchronous Functions) và Event Loop trong Node.js


Hàm bất đồng bộ (Asynchronous Functions): chương trình tiếp tục chạy, không chờ đợi. Giảm thời gian chờ của người dùng. JavaScript bản chất là ngôn ngữ bất đồng bộ.

Ví dụ: nếu code thực hiện request tốn nhiều thời gian, với async function, thời gian chờ sẽ quá lớn, người dùng không thể làm gì khác!

Do đó thường dùng code bất đồng bộ cho các operation tốn kém, tốn thời gian.

Ví dụ Async function

console.log('One'); jQuery.get('page.html', function (data) { console.log("Two"); }); console.log('Three');

Kết quả

One, Three, Two

Lưu ý: Thứ tự thực tế: One → Three → Two (callback chạy sau khi request xong).

Event Loop trong Node.js

Event loop là lịch trình trong thread quyết định operation nào thread nên thực hiện tại mỗi thời điểm.

Mọi ứng dụng Node.js bao gồm callback được thực thi khi có sự kiện: kết nối mới, I/O hoàn thành, timeout hết hạn, Promise resolve, v.v. Main thread (Event Loop) thực thi tất cả callback này.

Khi Event Loop chạy, mỗi vòng lặp Node kiểm tra xem có async I/O hoặc timer đang chờ không. Nếu không có gì, Node tắt xuống.

Các phase của Event Loop: timers → pending callbacks → idle/prepare → poll → check → close callbacks. process.nextTick() và Promise microtasks chạy giữa các phase, ưu tiên hơn macrotasks (setTimeout, I/O callbacks).