💪Promise, callback, async/await là gì?
Trong lập trình JavaScript, lập trình bất đồng bộ cho phép bạn xử lý các đoạn code cần thời gian để hoàn thành mà không làm chặn luồng chính (main thread). Điều này rất quan trọng cho các tác vụ như lấy dữ liệu từ API hoặc chờ đầu vào của người dùng. Dưới đây là phân tích về Promise, callback và async/await, tất cả đều liên quan đến lập trình bất đồng bộ:
Promise (Lời hứa):
Được giới thiệu trong ES6 (ECMAScript 2015).
Đại diện cho việc hoàn thành cuối cùng (hoặc thất bại) của một hoạt động bất đồng bộ.
Hoạt động như một chỗ trống cho giá trị tương lai.
Có ba trạng thái: đang chờ (pending), hoàn thành (fulfilled) và bị từ chối (rejected).
Được sử dụng để xử lý kết quả của hoạt động bất đồng bộ (hoàn thành) hoặc bất kỳ lỗi nào (bị từ chối).
Callback (Hàm gọi lại):
Là một hàm được truyền làm đối số cho một hàm khác.
Hàm thứ hai (thường xử lý các hoạt động bất đồng bộ) sẽ gọi hàm callback khi hoạt động hoàn thành.
Có thể dẫn đến "callback hell" với các hàm callback lồng nhau, làm cho code khó đọc và khó bảo trì.
Async/Await (Không đồng bộ/Đợi chờ) (được giới thiệu trong ES7):
Cách viết syntactic sugar (cú pháp gọn nhẹ) được xây dựng trên nền tảng Promise.
Khiến code bất đồng bộ trông giống như đồng bộ hơn (như thể nó đang xảy ra tuần tự).
Sử dụng các từ khóa
asyncvàawait.Từ khóa
asyncđánh dấu một hàm là bất đồng bộ.Từ khóa
awaittạm dừng thực thi của hàm async cho đến khi một Promise được giải quyết (hoặc bị từ chối).
Đây là một ví dụ để minh họa sự khác biệt:
Sử dụng Callback:
Sử dụng Promises:
Sử dụng Async/Await:
Tóm tắt:
Promise cung cấp một cách rõ ràng hơn để xử lý các hoạt động bất đồng bộ so với callback.
Async/await đơn giản hóa hơn nữa code bất đồng bộ bằng cách khiến nó trông giống đồng bộ hơn.
lựa chọn giữa Promise và async/await phụ thuộc vào sở thích của bạn và độ phức tạp của code bất đồng bộ. Async/await thường được coi là dễ đọc hơn cho các hoạt động bất đồng bộ phức tạp.
Last updated