JS cơ bản phần 1 - Bất đồng bộ, callback, promise, async/await trong js
Bất đồng bộ là gì?
"Bất đồng bộ" là một thuật ngữ thường được sử dụng trong lĩnh vực công nghệ thông tin để chỉ các quá trình, tác vụ, hoặc hệ thống không hoạt động đồng bộ với nhau. Điều này có thể ám chỉ đến các quá trình chạy không cùng một tốc độ, không hoàn thành vào cùng một thời điểm, hoặc không tuân theo một lịch trình chung.
JavaScript có phải là bất đồng bộ?
- Người ta thường nói JavaScript là ngôn ngữ bất đồng bộ, nhưng thực tế không hẳn như vậy.
- JS luôn đồng bộ & blocking
Đúng là JS có những cơ chế hỗ trợ lập trình bất đồng bộ (callback, promise, async/await), nhưng bản thân JS runtime hoàn toàn không phải. Bạn không thể nào viết một hàm với callback, promise hay async/await và hi vọng nó hoạt động asynchronous và non-blocking.
Code JS là đơn luồng và hoàn toàn đồng bộ. Chỉ có những tác vụ sử dụng WebAPIs (do browser) như AJAX, timeout,... thì JS mới thực thi chúng dạng bất đồng bộ. (hoặc một số API như AJAX của jquery cho phép cả hai chế độ).
Làm sao để sử lý bất đồng bộ trong JavaScript ?
Có 3 cách "thường dùng" để xử lý bất bồng bộ:
- Cách 1: Sử dụng Callback
- Cách 2: Sử dụng Promie
- Cách 3: Sử dụng Async/ Await
Callback trong JavaScript
Callback là gì ?
Trước khi tiếp tục với công việc khác, bạn có thể sử dụng callback functions (hàm gọi lại) trong lập trình để chạy các tác vụ khi một tác vụ khác hoàn thành. Khi một tác vụ bất đồng bộ hoàn thành, nó sẽ gọi một hàm gọi lại để thông báo và tiếp tục xử lý dữ liệu.
Có hai dạng callback:
- Callback bình thường: callback truyền cho hàm đồng bộ
- Async callback: là callback được truyền cho một hàm bất đồng bộ