介绍
ECMAScript 2018(简称 ES2018)是 JavaScript 的一个版本,它于2018年发布。这个版本新增了一些功能,包括 Promise.allSettled
方法。
在 Javascript 中,Promise.all
方法可以用于并行处理多个异步操作。但它只能处理成功的异步操作,一旦有一个异步操作失败了,就会直接抛出错误。而 Promise.allSettled
则可以处理异步操作无论成功还是失败都返回结果。
使用
Promise.allSettled
方法接收一个 Promise 数组作为参数,返回一个 Promise 对象,这个返回值是一个包含了所有 Promise 对象状态信息的对象数组。这个对象数组中的每个对象都表示一个 Promise 对象的状态信息,包含以下两个属性:
status
:Promise 对象的状态,值可以是fulfilled
(成功)或rejected
(失败)value
:如果 Promise 对象状态是fulfilled
,对应的数据值;如果是rejected
,则对应的错误对象
示例代码:
-- -------------------- ---- ------- ----- -------- - - ------------------------- ---------- ------------------------ --------- -- ---------------------------- ------------- -- - ---------------------- -- - -------------------------- -------------- --- ---
以上代码会打印出如下结果:
fulfilled Resolved promise rejected Rejected promise
指导意义
使用 Promise.allSettled
方法可以更好的处理异步任务:
- 可以返回所有 Promise 对象的状态,方便我们针对状态做出不同的处理;
- 不用担心 Promise 对象的异常终止会导致
Promise.all
方法无法返回结果的问题,即使异步操作失败,我们也能将结果返回给调用方。
我们可以使用 Promise.allSettled
来显示一些“关于国内视频网站”的搜索结果,无论该网站是否真实存在。
-- -------------------- ---- ------- ----- ------------- - - --------------------------------------------- ------------------------------------------ ------------------------------------------ ---------------------------------------- -- --------------------------------- ------------- -- - ----- -------------- - --------------------- -- ------------- --- ------------- ----- ----- - ----------------------- -- ---------------- ------------------- ---
以上代码会打印出类似以下结果:
[ "https://www.bilibili.com/", "https://www.acfun.cn/", "https://www.youku.com/", "http://www.tudou.com/" ]
结论
Promise.allSettled
方法丰富了 JavaScript 异步处理的能力,让我们可以更好的处理异步任务。同时,我们也可以使用这个方法来处理一些可疑的异步操作,例如在搜索引擎中,处理关于未知网站的搜索结果。
值得注意的是,Promise.allSettled
字符串判断状态值,而不是布尔值,因此需要使用 status === 'fulfilled'
和 status === 'rejected'
来判断状态。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6718c6d7ad1e889fe22e38f2