API
Promise.race()
race
(赛跑)Promise.race()
将多个promise
实例,包装成一个新的promise
实例。const p = Promise.race([p1, p2, p3])
,p1, p2, p3
有一个实例率先改变状态,**p**
的状态也跟着改变。率先改变的Promise
实例的返回值,就传给p
的回调函数。
举例:指定时间内没有获得结果,就将 Promise 的状态变为reject,否则变为resolve。
const p = Promise.race([
fetch('xxxx'),
new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('request timeout ......'))
}, 指定时间)
})
])
p.then(console.log).catch(console.error)
// 未超时代码
const p = Promise.race([
new Promise((resolve, reject) => {
setTimeout(() => resolve('OK...'), 3000)
}),
new Promise(function (resolve, reject) {
setTimeout(() => reject(new Error('request timeout ......')), 5000)
})
]);
p
.then(console.log)
.catch(console.error);
Promise.all()
Promise.all()
将多个promise
实例,包装成一个新的promise
实例。Promise.all()
参数可以不是数字,但必须具有 Iterator 接口,并且返回的每一个成员必须是 Promise
实例。const p = Promise.all([p1, p2, p3])
,p
的状态由p1, p2, p3
来决定,分为两种情况:
p1, p2, p3
的状态全是fulfilled
时,p
的状态才是fulfilled
,p1, p2, p3
返回值组成的数组,传给p
的回调函数。p1, p2, p3
中有任意一个状态是rejected
,p
的状态就是rejected
,第一个rejected
实例的返回值,传给p
的回调函数。
注意:p1, p2, p3
中有自己的catch
时,不会触发Promise.all()
定义的catch
方法。原因:执行完catch
方法后,实例已经变为resolve
了。