Các phương thức tĩnh (static method) của lớp đối tượng Promise
bao gồm:
Promise.resolve
Promise.reject
Promise.all
Promise.resolve
And Promise.reject
Có thể sử dụng phương thức Promise.resolve
hoặc Promise.reject
để đảm bảo chắc chắc rằng promise sẽ được resolved (hoặc rejected):
Promise.all
Xét trường hợp nếu chúng ta muốn thực hiện nhiều tác vụ song song, ta có thể cân nhắc dùng Promise.all
.
Chẳng hạn có hai promise dưới đây và nhiệm vụ của chúng ta là hợp nhất hai mảng trả về khi nhận được kết quả.
Hai promise này nếu chạy tuần tự sẽ tốn 7s. Do đó ta sẽ chia ra nhiều luồng công việc để chúng có thể làm việc song song và chỉ tốn 5s.
Sử dụng phương thức Promise.all
, đối số truyền vào là mảng các promise không quan tâm thứ tự. Giá trị trả về là một promise, do đó có thể sử dụng phương thức then
.
Chú ý rằng, các promise đối số đều phải chạy xong thì phương thức then
mới được gọi thực thi. Và do có nhiều giá trị trả về, giá trị của results
sẽ là mảng các giá trị trả về có thứ tự phụ thuộc vào thứ tự các promise truyền vào.
Nếu như một trong số các promise có trạng thái là rejected
, Promise.all
sẽ ngay lập tức trả về và results
sẽ chỉ bao gồm kết quả trả về của promise đó.
Khi đó, tất cả các promise khác dù có trạng thái là fulfilled
thì cũng không được trả về.
Giả sử ta có các promise sau:
Ta sử dụng Promise.all
như sau và thu được kết quả trả về là “rejected”.
Summary
Có thể nói, phương thức
Promise.all
tương tự như toán tử&&
:
- Nếu toàn bộ các promise được resolve thì kết quả trả về sẽ kết quả của các
fulfilled
promise.- Nếu có một promise bị reject thì kết quả trả về sẽ là kết quả của
rejected
promise.
Promise.allSettled
Tương tự với Promise.all
, Promise.allSettled
cũng nhận đối số là một mảng các promise và chạy các promise song song với nhau.
Tuy nhiên, giá trị trả về của phương thức này lại là mảng các object lưu trạng thái và dữ liệu trả về của các promise.
Xét các promise sau:
Ta gọi phương thức allSettled
:
Kết quả xuất ra console sẽ là:
Summary
Phương thức
Promise.allSettled
có đối số là mảng các promise và có giá trị trả về là mảng các đối tượng, mỗi đối tượng gồm hai thuộc tính:
status
: lưu trạng thái của promise.value
hoặcreason
: lưu giá trị của resolved promise hoặc lý do mà rejected promise bị rejectd.
Promise.any
Trái ngược với Promise.all
, phương thức Promise.any
sẽ trả về giá trị của fulfilled
promise khi có bất kỳ một promise nào được resolve.