1. 程式人生 > 其它 >Promise.all 與 Promise.race

Promise.all 與 Promise.race

1. Promise.all的使用
第一點字面意思:all意思為所有,全部的意思。
所以Promise.all可以將多個Promise例項包裝成一個新的Promise例項。同時,成功和失敗的返回值是不同的,成功的時候返回的是一個結果陣列,而失敗的時候則返回最先被reject失敗狀態的值。
通俗講就是 Promise.all會等所有請求完成之後返回一個array包裹。

    Promise.all([
                postAction('url',data),
                getAction('url'),
                getAction('url'),
    ]).then(resolve => {
      console.log(resolve)
    })

2. Promise.race的使用
第二點字面意思:race意思為比賽,賽跑的意思。
所以Promise.race裡面哪個結果獲得的快,就返回那個結果,不管結果狀態是成功還是失敗,都會返回。
通俗講就是 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'
    })

看到了一個博文下面的評論中 談到了race的場景使用:
race的使用場景就是,多臺伺服器部署了同樣的服務端程式碼,假如我要獲取一個商品列表介面,我可以在 race 中寫上所有伺服器中的查詢商品列表的介面地址,哪個伺服器響應快,就從哪個伺服器拿資料。
博文地址