1. Promise.all()
Promise.all(iterable)方法返回一個(gè)Promise實(shí)例。這個(gè)實(shí)例在iterable參數(shù)內(nèi)的所有Promise對象都resolved或者參數(shù)不包含Promise時(shí)回調(diào)完成。如果參數(shù)中有一個(gè)rejected,則此實(shí)例回調(diào)失敗,失敗原因時(shí)第一個(gè)rejected的promise結(jié)果。
例子
先定義兩個(gè)函數(shù),模擬異步請求。
func_1在2秒之后狀態(tài)變?yōu)?code>resolved,func_2在3秒之后狀態(tài)變?yōu)?code>resolved。
當(dāng)兩個(gè)函數(shù)都變?yōu)?code>resolved之后,Promise.all()的實(shí)例回調(diào)完成。
function func_1 () {
return new Promise(function (resolve, reject) {
setTimeout(function() {
console.log('func_1 end')
resolve()
}, 2000)
})
}
function func_2 () {
return new Promise(function (resolve, reject) {
setTimeout(function() {
console.log('func_2 end')
resolve()
}, 3000)
})
}
Promise.all([func_1(), func_2()])
.then(() => {
console.log('all end')
})
打印順序如下:

打印順序.png
2. Promise.race()
Promise.race(iterable) 。這個(gè)實(shí)例在iterable參數(shù)內(nèi)的只要有一個(gè)Promise對象狀態(tài)變?yōu)榻鉀Q或拒絕,返回的 promise就會(huì)解決或拒絕。
function func_1 () {
return new Promise(function (resolve, reject) {
setTimeout(function() {
console.log('func_1 end')
resolve()
}, 2000)
})
}
function func_2 () {
return new Promise(function (resolve, reject) {
setTimeout(function() {
console.log('func_2 end')
resolve()
}, 3000)
})
}
Promise.race([func_1(), func_2()])
.then(() => {
console.log('end')
})
打印順序如下:

Promise.race打印順序.png
end