es6 Promise.all() 和 Promise.race() 區別


Promise.all() 方法接收單個可迭代對象(如數組)作為參數,並返回一個promise。每個Promise都用一個數值進行了決議,對Promise.all() 的調用創建了新的 Promise p4。這些值的存儲順序保持了待決議(resolve)的Promise順序,與完成的先后順序無關,因此可以將結果匹配到每個Promise。如果任意Promise被拒絕,則p4會立即拒絕,不必等其他 Promise結束。

/* eslint-disable prefer-promise-reject-errors,eol-last */
let p1 = new Promise((resolve, reject) => resolve(42))
let p2 = new Promise((resolve, reject) => reject(43))
let p3 = new Promise((resolve, reject) => resolve(44))

let p4 = Promise.all([p1, p2, p3])
let p5 = Promise.all([p1, p3])
p1.then(v=>console.log('p1 then: ' + v)) // p1 then: 42
p4.then(v=>console.log('p4 then: ' + v)) // 不執行
p4.catch(v=>console.log('catch: ' + v)) // catch: 43 p2被拒絕,p4的拒絕處理函數立即調用,不會等p1和p3結束執行。但p1和p2仍然會執行。
p5.then(v=>{
  console.log(Array.isArray(v)) // true
  console.log(v) // [ 42, 44 ]
})

 Promise.race()

監視多個Promise。接受一個包含需監視的Promise的可迭代對象,並返回一個新的Promise,但一旦來源Promise中有一個被解決,所返回的Promise就會立刻被解決。

let r1 = Promise.resolve('r41')
let r11 = Promise.reject('r41')
let r2 = new Promise((resolve, reject) =>{
  resolve('r42')
})
let r3 = new Promise((resolve, reject) =>{
  reject('rejcet43')
})
let r4 = Promise.race([r1, r2, r3])
r4.then(v=>console.log('r4: ' + v)) // r4: r41

let r5 = Promise.race([r2, r3])
r5.then(value => console.log('then:' + value)) // then:r42
r5.catch(value => console.log('catch:' + value)) // 不執行

let r6 = Promise.race([r11, r2, r3])
r6.then(v=>console.log('r6 then: ' + v))
r6.catch(v=>console.log('r6 catch: ' + v)) // r6 catch: r41

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM