持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情
今天开始和大家一起系统的学习ES6+,每天3分钟,用一把斗地主的时间,重学ES6+,前面我们学习的then、catch、finally方法都属于Promise的实例方法,都是存放在Promise的prototype上的。 下面我们再来学习一下Promise的类方法。
Promise.resolve('a')
等价于
new Promise((resolve)=>resolve('a'))
Promise.reject('a')
等价于
new Promise((resolve,rejext)=>reject('a'))
ES11(ES2020)
中,添加了新的API Promise.allSettled
:
const p2 = new Promise((resolve, reject) => { setTimeout(() => { reject(22222) }, 2000); })
const p3 = new Promise((resolve, reject) => { setTimeout(() => { resolve(33333) }, 3000); })
// allSettled Promise.allSettled([p1, p2, p3]).then(res => { console.log(res) }).catch(err => { console.log(err) }) //[{status: 'fulfilled', value: 11111}, //{status: 'rejected', reason: 22222}, //{status: 'fulfilled', value: 33333}]
# race方法
* 如果有一个Promise有了结果,我们就希望决定最终新Promise的状态,那么可以使用race方法:
* race是竞技、竞赛的意思,表示多个Promise相互竞争,谁先有结果,那么就使用谁的结果;
# any方法
* any方法是`ES12`中新增的方法,和race方法是类似的:
* any方法会等到一个fulfilled状态,才会决定新Promise的状态;
* 如果所有的Promise都是reject的,那么也会等到所有的Promise都变成rejected状态;
* 如果所有的Promise都是reject的,那么会报一个AggregateError的错误。
# 总结
Promise在面试中,属于经常会问的知识,但是很少让手写promise的原理,因为时间不允许,但是手写promise源码是最能考察基本功的,所以大多是面试题都变成了,考察promsie的类方法,手写一个类方法的实现。之后有精力也会和大家分享类方法的实现。