- Khái niệm
- Đồng bộ(Synchronous)
Các dòng code được thực hiện tuần tự, công việc này xong thì mới được thực hiện các công việc khác.
Ví dụ:
- Bất đồng bộ(Asynchronous)
Các dòng code có thể chạy đồng thời, 2 function được gọi theo thứ tự nhưng function sau không cần đợi function trước kết thúc mà có thể chạy đồng thời với nhau.
Ví dụ:
- Đồng bộ(Synchronous)
- Tại sao nên sử dụng bất đồng bộ
Sử dụng bất đồng bộ (asynchronous programming) có nhiều lợi ích quan trọng trong các ứng dụng và hệ thống phần mềm. Dưới đây là một số lý do chính nên sử dụng bất đồng bộ:
a. Giảm thời gian chờ đợi: Nếu một tác vụ phải chờ đợi một tác vụ khác hoàn thành, nó sẽ phải đứng im đợi cho đến khi tác vụ đó hoàn thành. Bằng cách sử dụng bất đồng bộ, các tác vụ có thể chạy song song mà không cần chờ đợi nhau, giúp giảm thời gian chờ đợi tổng thể và tăng hiệu suất ứng dụng.
b. Tăng hiệu suất: Bất đồng bộ cho phép các tác vụ không liên quan được thực thi đồng thời, giúp tận dụng tối đa tài nguyên hệ thống và tăng hiệu suất tổng thể của ứng dụng.
c. Tương thích với các hệ thống có nhiều người dùng: Việc sử dụng bất đồng bộ có thể giúp tối ưu hóa việc sử dụng tài nguyên hệ thống, đảm bảo mọi người dùng đều nhận được phản hồi nhanh chóng mà không bị ảnh hưởng bởi hoạt động của người dùng khác.
d. Xử lý các tác vụ dài hạn: Khi có các tác vụ tốn nhiều thời gian xử lý, chẳng hạn như tính toán phức tạp, bất đồng bộ cho phép thực thi các tác vụ này mà không làm chậm toàn bộ quá trình thực thi của ứng dụng. - Các cách xử lý cơ bản
Để xử lý bất đồng bộ thì mọi người thường biết tới các tên gọi sau đây: Callback, Promise, Async/Await, đúng vậy đó là những cách phổ biến nhất để xử lý bất đồng bộ tùy thuộc vào những trường hợp mà áp dụng.- Dùng hàm Callback
Callback là một function sẽ được thực thi sau khi một function khác đã được thực thi xong hoặc mọi người có thể hiểu là truyền hàm B vào hàm A dưới dụng tham số một lúc nào đó hàm A sẽ gọi hàm B để chạy.
Tuy nhiên việc sử dụng các function lồng vào nhau nhiều sẽ dẫn đến trường hợp bị Callback Hell, chắc chắn các bạn khi mới tập xử lý bất đồng bộ ai cũng đã từng gặp phải trường hợp này. Callback Hell làm cho code khó đọc, khó hiểu và khó quản lý.
- Sử dụng Promise
Promise là một cơ chế xử lý các tác vụ bất đồng bộ và làm cho mã trở nên dễ đọc và dễ quản lý hơn. Nó giúp bạn xử lý các hoạt động không đồng bộ, chẳng hạn như yêu cầu AJAX, đọc/ghi tập tin, truy vấn cơ sở dữ liệu và tránh khỏi việc bị callback hell.
Promise có 3 trạng thái chính:
1. Pending: Trạng thái ban đầu của một Promise, nghĩa là tác vụ bất đồng bộ vẫn đang thực hiện và chưa hoàn thành.
2. Fulfilled (Resolved): Trạng thái khi tác vụ bất đồng bộ hoàn thành thành công và Promise trả về một giá trị (kết quả).
3. Rejected: Trạng thái khi tác vụ bất đồng bộ thất bại và Promise trả về một lỗi.
Để tạo một Promise, bạn sử dụng cú pháp như sau:
Sau khi tạo Promise, bạn có thể gán các xử lý khi Promise được giải quyết (fulfilled) hoặc bị từ chối (rejected) bằng cách sử dụng các phương thức then() và catch():
Nếu Promise được giải quyết thành công (fulfilled), hàm xử lý trong then() sẽ được gọi và nhận được kết quả của Promise. Nếu Promise bị từ chối (rejected), hàm xử lý trong catch() sẽ được gọi và nhận được lỗi. - Dùng Async/Await
Async/Await là một tính năng trong JavaScript giúp xử lý các tác vụ bất đồng bộ một cách dễ đọc và dễ quản lý hơn. Nó là một cách để làm việc với Promise mà trông như là đồng bộ (synchronous) mà không cần sử dụng callback hay gọi .then() và .catch().
Async được sử dụng để định nghĩa một hàm bất đồng bộ (async function). Khi một hàm được đánh dấu là async, nó tự động trả về một Promise. Khi bạn gọi một hàm bất đồng bộ, nó sẽ trả về một Promise ngay cả khi bạn không return một Promise một cách rõ ràng.
Await được sử dụng trong hàm bất đồng bộ để đợi cho một Promise được giải quyết (fulfilled) và lấy kết quả của nó. Khi sử dụng await, mã sẽ tạm dừng cho đến khi Promise hoàn thành, sau đó nó sẽ tiếp tục thực hiện các câu lệnh tiếp theo.
Ví dụ:
Kết quả của ví dụ trên:
Ở ví dụ trên, dù fetchData() trả về một Promise, ta không cần gọi .then() và .catch() để xử lý kết quả hoặc lỗi. Thay vào đó, ta sử dụng await để đợi cho Promise hoàn thành và lấy kết quả trả về. Việc này giúp làm cho code trông dễ đọc và giảm đi sự lồng nhau của các callback hay Promise.
- Dùng hàm Callback
- Kết luận
Qua các nội dung trên chúng ta rút ra kết luận là: Lập trình bất đồng bộ có hiệu suất tốt hơn lập trình đồng bộ. Tuy nhiên, trong nhiều trường hợp chúng ta vẫn phải thực thi các đoạn mã một cách đồng bộ. Chúng ta có ba kĩ thuật là Callback, Promise, Async/Await. Callback phù hợp trong các trường hợp xử lý đơn giản hơn (như đồng bộ 2, 3 hàm bất đồng bộ) vì nó dễ hiểu. Asyn/Await phù hợp cho các trường hợp phức tạp như cần đồng bộ quá nhiều hàm bất đồng bộ.
Bài viết liên quan
Nội dung bài viết: ĐIỂM TIN 09/06: WWDC 2026 – SIRI "LỘT XÁC" TOÀN DIỆN VÀ KỶ NGUYÊN APPLE INTELLIGENCE THẾ HỆ MỚI 🚀✨
"Táo khuyết" đã chính thức tung ra những quân bài chiến lược để tái định nghĩa trải nghiệm người dùng thông qua AI.
ĐIỂM TIN ĐẦU THÁNG 6: NVIDIA TUNG "SIÊU CHÍP" 1 PETAFLOP, APPLE SẴN SÀNG REBUILD SIRI TỪ SƠ KHAI 🚀💻
AI không còn là cuộc đua trên đám mây (Cloud) nữa, nó đã chính thức đổ bộ xuống từng bo mạch phần cứng và hệ điều hành cục bộ (On-device) ngay trên bàn làm việc của anh em.
TỔNG HỢP GOOGLE I/O 2026: KỶ NGUYÊN "AGENTIC AI" BÙNG NỔ VÀ BƯỚC CHUYỂN MÌNH CỦA ANDROID 17 🚀🌐
Đêm qua, sự kiện Google I/O 2026 đã chính thức diễn ra và đúng như dự đoán, Google đã mang đến một bữa tiệc công nghệ "ngập tràn AI" nhưng ở một cấp độ hoàn toàn mới: Kỷ nguyên của các Tác nhân tự chủ (Agentic AI).
ĐIỂM TIN 19/05: ĐÊM NAY GOOGLE I/O 2026 KHAI MẠC – CHỜ ĐỢI SỰ BÙNG NỔ CỦA ANDROID 17 VÀ SIÊU AI 🚀🌐
Hôm nay là ngày mà toàn bộ giới lập trình viên và các tín đồ công nghệ trên thế giới đổ dồn sự chú ý về Mountain View, California. Siêu sự kiện thường niên Google I/O 2026 sẽ chính thức bắt đầu phần Keynote quan trọng nhất vào đêm nay.
ĐIỂM TIN 18/05: TRƯỚC GIỜ G GOOGLE I/O 2026 VÀ CÚ BẮT TAY LỊCH SỬ CỦA AI AGENTS 🚀🌐
Đầu tuần này, cả thế giới công nghệ gần như nín thở để hướng về Shoreline Amphitheatre (California, Mỹ) – nơi siêu sự kiện Google I/O 2026 sẽ chính thức mở màn vào ngày mai.