1. Promise.resolve()
const promise = Promise.resolve(value) // 返回一個(gè)狀態(tài)為 resolved 的 新的 Promise 實(shí)例
// 相當(dāng)于
const promise = new Promise(resolve => resolve(value))
2. Promise.reject()
let promise = Promise.reject(error) // 返回一個(gè)狀態(tài)為 rejected 新的 Promise 實(shí)例
// 相當(dāng)于
const promise = new Promise((resolve, reject) => reject(value))
3. Promise.all()
const promise = Promise.all(iterable)
可以接受一個(gè)數(shù)組作為參數(shù),
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)})
上面 是三個(gè) Promise 實(shí)例如孝,組成一個(gè)數(shù)組今膊,作為參數(shù)傳入狼荞,只有當(dāng)三個(gè)實(shí)例都成功散罕,或者其中一個(gè)失敗了才會(huì)把參數(shù)傳給后面的回調(diào)函數(shù),并執(zhí)行衍菱。
三個(gè)都成功了, 會(huì)把三個(gè)實(shí)例成功的返回值作為一個(gè)數(shù)組傳出來(lái)枢舶,數(shù)組成員的順序和傳入的實(shí)力參數(shù)順序一致懦胞。
Promise.all([/*...*/]).then(result=>{ console.log(result) })
// [1, 2, 3]
如果其中有失敗的,那么在遇到第一個(gè)失敗的實(shí)例的時(shí)候就會(huì)把該實(shí)例的返回值傳出來(lái)凉泄。
const p1 = new Promise((resolve,reject)=>{reject('我錯(cuò)了')}).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)})
// 我錯(cuò)了
如果參數(shù)中的 Promise 實(shí)例有自己的 catch 方法躏尉,那么在 rejected 的時(shí)候,會(huì)調(diào)用 catch 方法后众,返回一個(gè)新的 Promise 實(shí)例胀糜,執(zhí)行之后也會(huì)變成 resolved ,所以 Promise.all() 里面所有的實(shí)例都會(huì)是 resolved蒂誉,因此還是會(huì)調(diào)用 then后面的方法教藻。
const p1 = new Promise((resolve,reject)=>{reject('我錯(cuò)了')}).catch(err => err)
const p2 = new Promise((resolve,reject)=>{reject('我也錯(cuò)了')}).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)})
// ["我錯(cuò)了", "我也錯(cuò)了", 3]
4. Promise.race()
const promise = Promise.race(iterable)
同 Promise.all()
類似,接收一個(gè)數(shù)組作為參數(shù)拗盒,
Promise.race([
new Promise((resolve, reject) => setTimeout(() => resolve(1), 1000)),
new Promise((resolve, reject) => setTimeout(() => reject(new Error("報(bào)錯(cuò)了")), 2000)),
new Promise((resolve, reject) => setTimeout(() => resolve(3), 3000))
]).then(result=>console.log(result);
// 1
上面三個(gè)參數(shù)中第一個(gè)會(huì)在 1 秒后完成怖竭,所以會(huì)返回第一個(gè) Promise 實(shí)例的返回值锥债,
誰(shuí)先完成陡蝇,返回誰(shuí)痊臭。