面试过程中少不了手写题,而promise
相关的手写题也是很经常被问到,这里就来整理一下promise
手写系列。
整个系列预计有以下几个函数的手写文章,今天先来实现all
函数
- all
- any
- race
- allSettled
- resolve+reject
- promise手写实现
Promise.all作用
Promise.all()
方法用于将多个Promise实例包装成一个新的Promise实例。
const a = Promise.all([p1, p2, p3])
最终a
的状态由p1,p2,p3
决定。只有状态都为fulfilled
时a
的状态才为fulfilled
,此时,p1,p2,p3
的返回值组成一个数组,传递给p的回调函数。只要有一个为rejected
,a
的状态就会变成rejected
,此时第一个被rejectd
的实力的返回值会被传递给a
的回调函数。如果传入的数组中有不是promise
实例的值或者对象,会被封装为一个状态为fulfilled
状态的promise
,返回值为其本身。
结合以上特点,我们来写几个例子,测试一下Promise.all
各种情况下的结果
let promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('promise1')
resolve(1)
}