天天看點

primise的all和race的用法

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'
    })
           

繼續閱讀