Giới thiệu
Tại sao cần dùng promise trong js, khi đó ta cần hiểu về 1 số định nghĩa về sync và async trong js
- Js là một ngôn ngữ đồng bộ sync
- Nhưng nó cũng có 1 số hàm thao tác bất đồng bộ async
VD: setTimeout, setInterval, fetch, XMLHttp Request, file reading, request animation frame
Pain (nỗi đau)
Trong Naruto - hoạt hình Nhật Bản, nhân vật Pain có câu nói: " Những kẻ không hề biết đến nỗi đau thực sự sẽ không bao giờ biết đến hòa bình thực sự." )
Để hiểu rõ về khái niệm promise thì khi không có promise thì khi giải quyết vấn đề (pain) gì thì ta cần dùng promise?
Vấn đề này thường được gọi tên là Callback hell hay JavaScript Pyramid of Doom
Khi nhiều callback lồng nhau, các công việc cần giải quyết phụ thuộc vào nhau, output việc 1 là input cho việc 2,.....Làm code trở nên khó đọc, khó hiểu và khó bảo trì.
Khi đó dùng promise js hỗ trợ xử lý các thao tác bất đồng bộ thay cho callback.
Concept
Cú pháp:
var promise = new Promise( function(resolve, reject) { //logic // resolve: success ! // reject: fail reject('co loi'); } promise .then(function() { //logic success }) .catch(function(error) { console.log(error) }) .finally(function() { console.log('proccess done') })
Khi định nghĩa promise có 3 trạng thái:
- Pending
- Fulfilled
- Rejected
Đi vào phần thực hành thì mình sẽ note lại ở bài sau