Promise.allSettled()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2020.
Phương thức tĩnh Promise.allSettled() nhận một iterable của các promise làm đầu vào và trả về một Promise duy nhất. Promise được trả về này thực hiện khi tất cả các promise trong đầu vào đã ổn định (kể cả khi một iterable rỗng được truyền vào), với một mảng các đối tượng mô tả kết quả của từng promise.
Try it
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) =>
setTimeout(reject, 100, "foo"),
);
const promises = [promise1, promise2];
Promise.allSettled(promises).then((results) =>
results.forEach((result) => console.log(result.status)),
);
// Expected output:
// "fulfilled"
// "rejected"
Cú pháp
Promise.allSettled(iterable)
Tham số
Giá trị trả về
Một Promise là:
-
Đã fulfilled ngay lập tức, nếu
iterableđược truyền vào là rỗng. -
Được fulfilled bất đồng bộ, khi tất cả các promise trong
iterableđã cho đã ổn định (hoặc fulfilled hoặc rejected). Giá trị fulfillment là một mảng các đối tượng, mỗi đối tượng mô tả kết quả của một promise trongiterable, theo thứ tự của các promise được truyền vào, bất kể thứ tự hoàn thành. Mỗi đối tượng kết quả có các thuộc tính sau:status-
Một chuỗi, có thể là
"fulfilled"hoặc"rejected", cho biết trạng thái cuối cùng của promise. value-
Chỉ có mặt nếu
statuslà"fulfilled". Giá trị mà promise được fulfilled với. reason-
Chỉ có mặt nếu
statuslà"rejected". Lý do mà promise bị từ chối với.
Nếu
iterableđược truyền vào không rỗng nhưng không chứa promise đang chờ xử lý, promise được trả về vẫn được fulfilled bất đồng bộ (thay vì đồng bộ).
Mô tả
Phương thức Promise.allSettled() là một trong các phương thức đồng thời promise. Promise.allSettled() thường được sử dụng khi bạn có nhiều tác vụ bất đồng bộ không phụ thuộc vào nhau để hoàn thành thành công, hoặc bạn luôn muốn biết kết quả của từng promise.
Ngược lại, Promise được trả về bởi Promise.all() có thể phù hợp hơn nếu các tác vụ phụ thuộc vào nhau, hoặc nếu bạn muốn từ chối ngay lập tức khi bất kỳ tác vụ nào bị từ chối.
Ví dụ
>Sử dụng Promise.allSettled()
Promise.allSettled([
Promise.resolve(33),
new Promise((resolve) => setTimeout(() => resolve(66), 0)),
99,
Promise.reject(new Error("an error")),
]).then((values) => console.log(values));
// [
// { status: 'fulfilled', value: 33 },
// { status: 'fulfilled', value: 66 },
// { status: 'fulfilled', value: 99 },
// { status: 'rejected', reason: Error: an error }
// ]
Thông số kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-promise.allsettled> |