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中有一個被解決,所返回的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