Promise.allSettled()方法的语法是什么?
简介:
Promise.allSettled()方法的语法是什么?
- 基本语法格式
Promise.allSettled(iterable)是Promise.allSettled()方法的基本语法。其中,iterable是一个可迭代对象,通常是一个包含Promise对象的数组,不过也可以是其他符合可迭代协议的对象,如Set等。
- 例如:
const promises = [
new Promise((resolve) => setTimeout(() => resolve('成功1'), 1000)),
new Promise((resolve, reject) => setTimeout(() => reject('失败2'), 1500)),
new Promise((resolve) => setTimeout(() => resolve('成功3'), 2000))
];
Promise.allSettled(promises)
.then((results) => {
console.log(results);
});
- 返回值
- 它返回一个新的
Promise。这个Promise会在所有传入iterable中的Promise对象都已完成(fulfilled或者rejected)后被resolved。
- 返回的结果是一个数组,数组中的每个元素是一个对象,这个对象有两个属性:
status:其值为"fulfilled"或者"rejected",用于表示对应的Promise是成功还是失败。
- 当
status为"fulfilled"时,对象有value属性,其值为对应的Promise成功返回的值;当status为"rejected"时,对象有reason属性,其值为对应的Promise被拒绝的原因。例如:[
{
status: "fulfilled", value: "成功1"},
{
status: "rejected", reason: "失败2"},
{
status: "fulfilled", value: "成功3"}
]
- 错误处理
- 与
Promise.all()不同,Promise.allSettled()不会因为其中一个Promise被rejected就立即返回一个rejected的Promise。它会等待所有的Promise完成后,将所有结果(包括成功和失败)都放在返回的数组中。
- 如果在执行
Promise.allSettled()过程中出现了同步错误(例如,传递给Promise.allSettled()的参数不是可迭代对象),那么它会抛出一个同步错误,就像其他JavaScript函数一样。但如果是内部的Promise对象在异步执行过程中出现错误,这些错误会被捕获并作为rejected的结果包含在最终返回的数组中。