Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
ES系列文章
ES9 Promise扩展
Promise.prototype.finally()
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
// reject('fail')
}, 1000)
}).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
}).finally(()=>{
console.log('finally')
})
promise结束时,无论结果是fulfilled或者是rejected,都会执行指定的回调函数。这为在Promise是否成功完成后都需要执行的代码提供了一种方式,避免了同样的语句需要在then()和catch()中各写一次的情况
Promise 状态
- pending: 初始状态,既不是成功,也不是失败状态。
- fulfilled: 意味着操作成功完成。
- rejected: 意味着操作失败。
- Settled:Promise要么被完成,要么被拒绝。Promise一旦达成,它的状态就不再改变。
ES11 Promise扩展
Promise.allSettled()
Promise.allSettled() 方法返回一个promise
,该promise
在所有给定的promise
已被解析或被拒绝后解析,并且每个对象都描述每个promise
的结果。
// es2020
Promise.allSettled([
Promise.resolve({
code: 200,
data: [1, 2, 3]
}),
Promise.reject({
code: 500,
data: []
}),
Promise.resolve({
code: 200,
data: [7, 8, 9]
}),
]).then(res=>{
// console.log(res)
// console.log('成功')
const data = res.filter(item => item.status === 'fulfilled')
console.log(data)
}).catch(err=>{
console.log(err)
console.log('失败')
})
allSettled() vs all()
Promise.all方法用于将多个Promise实例,包装成一个新的Promise实例
Promise.all([
Promise.resolve({
code: 200,
data: [1, 2, 3]
}),
Promise.reject({
code: 500,
data: []
}),
Promise.resolve({
code: 200,
data: [7, 8, 9]
}),
]).then(res=>{
console.log(res)
console.log('成功')
}).catch(err=>{
console.log(err)
console.log('失败')
})
Promise.allSettled
跟Promise.all
类似, 其参数接受一个Promise
的数组, 返回一个新的Promise
, 唯一的不同在于, 其不会进行短路, 也就是说当Promise
全部处理完成后我们可以拿到每个Promise
的状态, 而不管其是否处理成功.
一个前端小白,若文章有错误内容,欢迎大佬指点讨论!