在 ECMAScript 2019 中,Promise.allSettled 方法被引入,用于处理 Promise 数组。它可以同时处理 Promise 数组中所有 Promise 对象的状态,无论是成功还是失败,都能够得到相应的结果。本文将全面解析 Promise.allSettled 方法,包括用法、示例代码以及注意事项。
Promise.allSettled 方法介绍
Promise.allSettled 方法用于接收一个 Promise 数组,返回一个新的 Promise 对象。当 Promise 数组中的所有 Promise 对象都已经 settled(即不再处于 pending 状态)时,该新的 Promise 对象会 resolve,返回一个数组,该数组包含了所有 Promise 对象的结果。如果 Promise 数组中有 Promise 对象 reject 了,那么该新的 Promise 对象也会 resolve,返回一个数组,该数组包含了所有 Promise 对象的结果,包括 reject 的 Promise 对象的结果。
Promise.allSettled 方法的语法如下:
Promise.allSettled(iterable);
其中,iterable 表示一个可迭代对象,如数组或字符串。该对象中的每个元素都必须是 Promise 对象。
Promise.allSettled 方法示例
下面是一个使用 Promise.allSettled 方法的示例代码:
// javascriptcn.com 代码示例 const promise1 = Promise.resolve(1); const promise2 = Promise.reject("error"); const promise3 = Promise.resolve(3); Promise.allSettled([promise1, promise2, promise3]) .then(results => { console.log(results); }) .catch(error => { console.log(error); });
在这个示例代码中,我们定义了三个 Promise 对象,分别是 promise1、promise2 和 promise3。其中,promise1 和 promise3 是成功的 Promise 对象,promise2 是失败的 Promise 对象。我们将这三个 Promise 对象作为参数传递给 Promise.allSettled 方法。当所有 Promise 对象都 settled 时,Promise.allSettled 方法会返回一个 Promise 对象,并执行 then 方法中的回调函数。
在 then 方法中,我们打印了 results 变量的值。results 变量是一个数组,包含了所有 Promise 对象的结果。对于成功的 Promise 对象,它的结果会被包装在一个对象中,该对象包含了 status 属性和 value 属性。对于失败的 Promise 对象,它的结果也会被包装在一个对象中,该对象包含了 status 属性和 reason 属性。status 属性表示 Promise 对象的状态,它的值可能是 "fulfilled" 或 "rejected"。value 属性表示成功的 Promise 对象的结果,reason 属性表示失败的 Promise 对象的原因。
在本示例中,results 变量的值是:
[ { status: "fulfilled", value: 1 }, { status: "rejected", reason: "error" }, { status: "fulfilled", value: 3 } ]
因为 promise2 是一个失败的 Promise 对象,所以 results 数组中包含了一个 status 为 "rejected" 的对象,该对象的 reason 属性为 "error"。
Promise.allSettled 方法注意事项
使用 Promise.allSettled 方法时需要注意以下几点:
Promise.allSettled 方法返回的 Promise 对象的状态只有两种:resolved 和 rejected。如果 Promise 数组中有一个或多个 Promise 对象 reject 了,Promise.allSettled 方法也会 resolve,而不是 reject。这意味着即使 Promise 数组中有 Promise 对象 reject 了,我们也可以在 then 方法中获取所有 Promise 对象的结果。
Promise.allSettled 方法返回的 Promise 对象的结果是一个数组,该数组的顺序与 Promise 数组中的顺序相同。这意味着我们可以通过数组下标获取 Promise 对象的结果。
Promise.allSettled 方法返回的 Promise 对象的结果中,对于成功的 Promise 对象,其结果会被包装在一个对象中,该对象包含了 status 属性和 value 属性。对于失败的 Promise 对象,其结果也会被包装在一个对象中,该对象包含了 status 属性和 reason 属性。
总结
在 ECMAScript 2019 中,Promise.allSettled 方法被引入,用于处理 Promise 数组。它可以同时处理 Promise 数组中所有 Promise 对象的状态,无论是成功还是失败,都能够得到相应的结果。本文介绍了 Promise.allSettled 方法的用法、示例代码以及注意事项。希望本文能够帮助读者更好地理解 Promise.allSettled 方法,并在实际开发中得到应用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/657cc91bd2f5e1655d7982db