Javascript: Promise vs. Observable

PromiseObservable đều giúp chúng ta quản lí những tác vụ async trong Javascript. Quản lí tốt những async trên website của bạn là một trong những nhiệm vụ tất yếu và không thể tránh khỏi. Vì vậy, chúng ta nên tìm hiểu kỹ về nó.

Chúng ta có một số async trên website như sau: event(click, mouse, scroll, …), AJAX call. Và chúng ta có một số cách để xử lí chúng như sau: dùng callback, promise, async/awaitobservable. Bạn tìm đọc sự khác nhau giữa callback, promise, async/await nhé. Trong phạm vi bài này, chúng ta chỉ tập trung khai thác sự giống và khác nhau giữa promise và observable nhé 🙂

Promise

Promise như là một lời hứa cho một dữ liệu, hành động được hoàn thành(hoặc bị lỗi) của một tác vụ bất đồng bộ và trả về kết quả của nó. Bất đồng bộ có nghĩa là sẽ hoàn thành sau, chứ không phải ngay lập tức và nó sẽ báo cho ta biết khi nó hoàn thành(hoặc bị lỗi).

Ví dụ: Vào một buổi sáng đẹp trời, bạn đang ngồi uống cafe và tự dưng đói bụng và muốn ăn gì đó. Bạn lên website order một ổ bánh mì tại một cửa hàng nào đó. Và cửa hàng thông báo khoảng 10 phút nữa sẽ giao bánh mì đến cho bạn. Như vậy, hành động làm một ổ bánh mì là một tác vụ bất đồng bộ, vì nó cần thời gian là khoảng 10 phút để hoàn thành. Cửa hàng đã cho bạn một Promise là khoảng 10 phút sau sẽ có bánh mì cho bạn. Sau đó, bạn vẫn tiếp tục nhiệm vụ của bạn là uống cà phê và chờ khi nào bành mì giao đến thì bạn sẽ nhận và thưởng thức. Bạn có thể thấy một Promise có 3 trạng thái sau: chờ-bạn chờ bánh mì giao đến(pending), hoàn thành-giao cho bạn xong(fulfilled), từ chối-không thể làm bánh mì cho bạn vì hết bánh mì(rejected).

JavaScript Promises, Callbacks, and Async/Await for Beginners | Hacker Noon

Một số điểm đặc trưng của promise là:

– Chỉ trả về một giá trị duy nhất, đó có thể là object, array, number, …

– Không thể cancel được request

– Được khởi tạo ngay lập tức mặc dù chưa có bất kỳ đăng ký nào. Nó không quan tâm bạn đã đăng ký promise hay chưa, miễn là bạn khai báo một promise thì nó sẽ chạy constructor

Observable

Observable cũng có những tính năng của Promise và thêm một số ưu điểm khác. Nó như một ống dữ liệu(data stream), chúng ta có thể đẩy nhiều dữ liệu qua ống này. Observable là một khái niệm từ Reactive Programming. Reactive là một nền tảng xử lý những tác vụ bất đồng bộ thông qua những ống dữ liệu(data stream). Reactive hỗ trợ nhiều ngôn ngữ Java, .NET, … Trong đó có thư viện RxJS hỗ trợ data stream cho các async trong Javascript.

Một số điểm đặc trưng của Observable là:

– Trả về một hoặc nhiều giá trị

– Có thể cancel request

– Chỉ được khởi tạo khỉ và chỉ khi có đăng ký đến observable đó(có listener)

– Có thể retry

– Có thể dùng với event

– Có các thao tác tiền xử lý dữ liệu như: filter, map, …

Xem thêm những thủ thuật xịn cho Javascript tại Youtube của tôi.

Leave a Reply

Your email address will not be published. Required fields are marked *