1、Promise
是異步程式設計的一種解決方案,其實是一個構造函數,有all、race、reject、resolve這幾個方法,原型上有then、catch等方法。
2、promise.all
主要用于一次性執行多個異步方法,并且按傳入順序執行。該方法提供了并行執行異步操作的能力,并且在所有異步操作執行完後并且執行結果都是成功的時候才執行then方法。
//成功的時候傳回的是一個結果數組,而失敗的時候則傳回最先被reject失敗狀态的值
let p1 = new Promise((resolve, reject) => {
resolve('成功了')
})
let p2 = new Promise((resolve, reject) => {
resolve('success')
})
let p3 = Promse.reject('失敗')
Promise.all([p1, p2])
.then((result) => {
console.log(result) //['成功了', 'success']
})
.catch((error) => {
console.log(error)
})
Promise.all([p1,p3,p2])
.then((result) => {
console.log(result)
})
.catch((error) => {
console.log(error) // 失敗了,打出 '失敗'
})
3、Promise.race
在執行多個異步操作中,隻要有一個異步操作執行完畢,就立刻執行回調,隻保留第一個執行完成的異步操作的結果。
注意:其它沒有執行完畢的異步操作仍然會繼續執行,而不是停止。
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
},1000)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('failed')
}, 500)
})
Promise.race([p1, p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error) // 打開的是 'failed'
})