ES2020之Promise.allSettled
Promise
2023-09-11 14:19:18 时间
专栏目录请点击
简介
在Promise对象上面一共提供了很多组合方法供我们使用,他们都接受多个promise对象,然后返回一个表示组合结果的新的promise,依据传入的promise的结果状态,返回的新的promise切换为不同的状态
常用方法
他们的参数都是一个
promise
数组
promise.all
:返回一个组合后的promise
,当传入的所有的promise全部转化为fulfill状态的时候,组合后的promise
也会变为fulfill状态。但是如果有一个promise的状态为rejected状态,那么返回的组合后的promise也是rejected状态promise.race
返回一个组合后的promise,当传入的promise有任意一个切换为fulfill状态或rejected状态的时候,改promise将会立即切换为相同的状态promise.allSettled
:返回一个组合后的promise,当多有的promise全部切换为fulfilled状态或者rejected状态时。改promise将切换为fulfilled状态(当所有的异步全部执行完后,返回的promise就会变为fulfilled状态)promise.any
:返回一个组合后的promise,当传入的promise状态有一个是fulfilled状态的时候,他会立即变为fulfilled状态
例子
我们执行下面的代码
const async1 = () => {
return new Promise((resolve,reject) => {
setTimeout(() => {
resolve("hello")
},2000)
})
}
const async2 = () => {
return new Promise((resolve,reject) => {
setTimeout(() => {
reject("world")
},2000)
})
}
const async3 = async () => {
const result = await Promise.allSettled([async1(),async2()])
console.log(result);
console.log(result.length);
return result
}
async3()
打印如下
- 我们会发现他们最终拿到的是一个数组,数组内是每一个
promise
执行的结果 - 引入返回的是一个数组,我们可以通过数组的方法找出执行成功或者失败的
promise
// 获取所有 fulfilled 状态的结果信息
results.filter( result => result.status === "fulfilled" )
// 获取所有 rejected 状态的结果信息
results.filter( result => result.status === "rejected" )
相关文章
- [web] 理解和使用Promise.all和Promise.race
- [Javascript] Check Promise is Promise
- 小程序原有的API promise 化
- promise用法详解
- [Ramda] Convert a Promise.all Result to an Object with Ramda's zip and zipObj
- Promise是什么
- promise和Observables的区别
- SAP Cloud for Customer框架是如何使用JavaScript Promise的
- SAP Cloud for Customer里一个Promise的实际应用场合
- Atitit Uncaught (in promise) SyntaxError Unexpected token < in JSON at position 0
- Promise.all API 的出错处理
- 将使用回调函数作为参数的函数改造为返回 Promise 的一个具体例子
- promise 异步问题。导致页面没有实时刷新的解决办法:改成同步
- vue 中promise 异步请求数据
- 手写promise.all和 promise.race
- Promise - (二)Promise核心实现