Sau khi khởi tạo đối tượng promise thành công, chúng ta có thể gọi thực hiện các phương thức xử lý sau:

promise.then(onFulfilled, onRejected).catch(onRejected).finally(onFinally)

Cả ba phương thức trên đều nhận các callback làm đối số.

then

Nếu promise có trạng thái là fulfilled, then sẽ thực thi callback onFulfilled bên trong nó.

const onFulfilled = () => console.log("Promise is fulfilled")
 
promise.then(onFulfilled)

Trường hợp chỉ muốn xử lý trạng thái rejected của promise, ta có thể truyền vào null ở tham số thứ nhất và onRejected ở tham số thứ hai:

const onRejected = () => console.error("Promise is rejected")
 
promise.then(null, onRejected)

Tuy nhiên, cách này không được khuyến khích, thay vào đó hãy sử dụng catch.

Bên trong callback của then, ta có thể:

  • Trả về một Promise khác.
  • Trả về một giá trị, có thể là undefined.
  • Quăng ra một lỗi.

catch

Nếu promise có trạng thái là rejected, onRejected sẽ được thực thi bởi catch.

const onRejected = () => console.error("Promise is rejected")
 
promise.catch(onRejected)

Trường hợp không dùng catch mà promise có trạng thái là rejected, có thể xảy ra lỗi “Uncaught (in promise)“.

finally

Nếu promise có trạng là fulfilled hoặc rejected thì phương thức finally sẽ được gọi và onFinally sẽ được thực thi.

const onFinally = () => console.log("Promise is executed")
 
promise.finally(onFinally)

Phương thức này thường được sử dụng để dọn dẹp, chẳng hạn như dùng để xóa các loading animations hoặc đóng kết nối tới API.