1. Promise.resolve()
const promise = Promise.resolve(value) // 返回一个状态为 resolved 的 新的 Promise 实例
// 相当于
const promise = new Promise(resolve => resolve(value))
2. Promise.reject()
let promise = Promise.reject(error) // 返回一个状态为 rejected 新的 Promise 实例
// 相当于
const promise = new Promise((resolve, reject) => reject(value))
3. Promise.all()
const promise = Promise.all(iterable)
可以接受一个数组作为参数,
Promise.all([
new Promise((resolve,reject)=>{resolve(1)}),
new Promise((resolve,reject)=>{resolve(2)}),
new Promise((resolve,reject)=>{resolve(3)}),
]).then(result=>{ console.log(result) }).catch(err=>{console.log(err)})
上面 是三个 Promise 实例,组成一个数组,作为参数传入,只有当三个实例都成功,或者其中一个失败了才会把参数传给后面的回调函数,并执行。
三个都成功了, 会把三个实例成功的返回值作为一个数组传出来,数组成员的顺序和传入的实力参数顺序一致。
Promise.all([/*...*/]).then(result=>{ console.log(result) })
// [1, 2, 3]
如果其中有失败的,那么在遇到第一个失败的实例的时候就会把该实例的返回值传出来。
const p1 = new Promise((resolve,reject)=>{reject('我错了')}).catch(err => err)
const p2 = new Promise((resolve,reject)=>{reject(2)}).catch(err => err)
const p3 = new Promise((resolve,reject)=>{resolve(3)})
Promise.all([p1, p2, p3])
.then(result=>{ console.log(result) })
.catch(err=>{console.log(err)})
// 我错了
如果参数中的 Promise 实例有自己的 catch 方法,那么在 rejected 的时候,会调用 catch 方法,返回一个新的 Promise 实例,执行之后也会变成 resolved ,所以 Promise.all() 里面所有的实例都会是 resolved,因此还是会调用 then后面的方法。
const p1 = new Promise((resolve,reject)=>{reject('我错了')}).catch(err => err)
const p2 = new Promise((resolve,reject)=>{reject('我也错了')}).catch(err => err),
const p3 = new Promise((resolve,reject)=>{resolve(3)})
Promise.all([p1, p2, p3])
.then(result=>{ console.log(result) })
.catch(err=>{console.log(err)})
// ["我错了", "我也错了", 3]
4. Promise.race()
const promise = Promise.race(iterable)
同 Promise.all()
类似,接收一个数组作为参数,
Promise.race([
new Promise((resolve, reject) => setTimeout(() => resolve(1), 1000)),
new Promise((resolve, reject) => setTimeout(() => reject(new Error("报错了")), 2000)),
new Promise((resolve, reject) => setTimeout(() => resolve(3), 3000))
]).then(result=>console.log(result);
// 1
上面三个参数中第一个会在 1 秒后完成,所以会返回第一个 Promise 实例的返回值,
谁先完成,返回谁。