成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Promise的幾個(gè)擴(kuò)展API總結(jié)

李義 / 2012人閱讀

摘要:的幾個(gè)擴(kuò)展總結(jié)描述和相反,當(dāng)所有的被拒絕之后,方法執(zhí)行完成的決議,如果存在一個(gè)執(zhí)行完成的決議,方法則執(zhí)行拒絕里邊的所有實(shí)例反過來就好了執(zhí)行到此執(zhí)行到此描述忽略被拒絕的,只需要有一個(gè)完成的,方法就執(zhí)行完成操作,如果全部的都被拒絕,方法執(zhí)行拒絕

Promise的幾個(gè)擴(kuò)展API總結(jié) 1. Promise.none 描述:

和 Promise.all 相反,當(dāng)所有的promise被拒絕之后,none方法執(zhí)行完成的決議,如果存在一個(gè)promise執(zhí)行完成的決議,none方法則執(zhí)行拒絕

code:
  Promise.none = function(promises) {
    return Promise.all(promises.map(promise => {
      return new Promise((resolve, reject) => {
        // Promise.all里邊的所有promise實(shí)例反過來就好了
        return Promise.resolve(promise).then(reject, resolve)
      })
    }))
  }
  const promisesForNoneTest1= [
    Promise.reject("1"),
    Promise.reject("2"),
    Promise.resolve("3"),
    Promise.reject("4"),
  ]
  Promise.none(promisesForNoneTest1).then(res => {
    debugger
  }, res => {
    debugger // 執(zhí)行到此
  })

  const promisesForNoneTest2= [
    Promise.reject("1"),
    Promise.reject("2"),
    Promise.reject("3"),
    Promise.reject("4"),
  ]
  Promise.none(promisesForNoneTest2).then(res => {
    debugger // 執(zhí)行到此
  }, res => {
    debugger 
  })
2. Promise.any 描述:

忽略被拒絕的promise,只需要有一個(gè)完成的promise,any方法就執(zhí)行完成操作,如果全部的promise都被拒絕,any方法執(zhí)行拒絕操作

code:
  Promise.any = function(promises) {
    const result = []
    return Promise.all(promises.map(promise => {
      // 控制Promise.all處理的所有的promise都執(zhí)行reslove決議
      return Promise.resolve(promise).then(res => {
        // 但是只記錄實(shí)際上決議為resolve的結(jié)果值
        result.push(res)
      }, () => {
        // 防止穿透,這里可以進(jìn)行拒絕信息的返回
      }) 
    })).then(() => {
      return new Promise((resolve, reject) => {
        if (result.length > 0) resolve(result)
        else reject(result)
      })
    })
  }
  const promisesForAnyTest1= [
    Promise.reject("1"),
    Promise.resolve("2"),
    Promise.reject("3"),
    Promise.resolve("4"),
    Promise.resolve("5"),
  ]

  Promise.any(promisesForAnyTest1).then(res => {
    debugger // 執(zhí)行到此,res 為 ["2", "4", "5"]
  }, res => {
    debugger
  })

  const promisesForAnyTest2= [
    Promise.reject("1"),
    Promise.reject("2"),
    Promise.reject("3"),
    Promise.reject("4"),
    Promise.reject("5"),
  ]

  Promise.any(promisesForAnyTest2).then(res => {
    debugger 
  }, res => {
    debugger // 執(zhí)行到此
  })
3. Promise.first 描述:

類似race,但是只要有一個(gè)promise決議為完成(忽略前邊被拒絕的promise),就忽略后邊的promise

code:
  Promise.first = function(promises) {
    return new Promise((resolve, reject) => {
      let rejectNum = 0
      promises.forEach(promise => {
        // 如果當(dāng)前 promise 決議為reslove,那就直接執(zhí)行"根promise"的resolve
        // 否則去記錄到拒絕的promise中,然后判斷全部的promise拒絕了,執(zhí)行"根promise"的reject
        Promise.resolve(promise).then(resolve, () => {
          if (++rejectNum === promises.length) {
            // 這里可以控制reject返回的信息
            reject()
          }
        })
      })
    })
  }
  const promisesForFirstTest1= [
    Promise.reject("1"),
    Promise.resolve("2"),
    Promise.reject("3"),
    Promise.resolve("4"),
  ]
  Promise.first(promisesForFirstTest1).then(res => {
    debugger // 執(zhí)行到此,res 為 "2"
  }, res => {
    debugger
  })

  const promisesForFirstTest2= [
    Promise.reject("1"),
    Promise.resolve("2"),
    Promise.reject("3"),
    Promise.resolve("4"),
  ]
  Promise.first(promisesForFirstTest2).then(res => {
    debugger 
  }, res => {
    debugger // 執(zhí)行到此
  })
4. Promise.map 描述:

在第二個(gè)方法 any 中,用到了Promise.all的方法,里邊使用Array.prototype.map方法處理了所有的的promise,當(dāng)前這個(gè)Promise.map方法則希望把他倆弄到一起

Promise.map方法希望實(shí)現(xiàn)一個(gè)處理批量異步操作的并行迭代方法,本質(zhì)上是利用Promise.all進(jìn)行二次封裝

code:
  Promise.map = function(promises, resolveCallback, rejectCallback) {
    return Promise.all(promises.map(promise => {
      return Promise.resolve(promise).then(result => {
        return resolveCallback(result)
      }, error => {
        return Promise.reject(rejectCallback(error))
      })
    }))
  }
  const promisesForMapTest1= [
    Promise.resolve("1"),
    Promise.resolve("2"),
    Promise.resolve("3"),
    Promise.resolve("4"),
  ]

  Promise.map(promisesForMapTest1, result => {
    return result * 100
  }, result => {
    return result
  }).then(res => {
    debugger // 執(zhí)行到此,res為 [100, 200, 300, 400]
  }, res => {
    debugger
  })

  const promisesForMapTest2= [
    Promise.resolve("1"),
    Promise.resolve("2"),
    Promise.reject("3"),
    Promise.resolve("4"),
  ]

  Promise.map(promisesForMapTest2, result => {
    return result * 100
  }, result => {
    return result
  }).then(res => {
    debugger 
  }, res => {
    debugger // 執(zhí)行到此,res為 "3"
  })

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/101617.html

相關(guān)文章

  • 前端面試知識(shí)點(diǎn)目錄整理

    摘要:寫在前面金三銀四又到了一年一度的跳槽季相信大家都在準(zhǔn)備自己面試筆記我也針對(duì)自己工作中所掌握或了解的一些東西做了一個(gè)目錄總結(jié)方便自己復(fù)習(xí)詳細(xì)內(nèi)容會(huì)在之后一一對(duì)應(yīng)地補(bǔ)充上去有些在我的個(gè)人主頁筆記中也有相關(guān)記錄這里暫且放一個(gè)我的面試知識(shí)點(diǎn)目錄大家 寫在前面: 金三銀四, 又到了一年一度的跳槽季, 相信大家都在準(zhǔn)備自己面試筆記, 我也針對(duì)自己工作中所掌握或了解的一些東西做了一個(gè)目錄總結(jié),方便自...

    xzavier 評(píng)論0 收藏0
  • 前端面試知識(shí)點(diǎn)目錄整理

    摘要:寫在前面金三銀四又到了一年一度的跳槽季相信大家都在準(zhǔn)備自己面試筆記我也針對(duì)自己工作中所掌握或了解的一些東西做了一個(gè)目錄總結(jié)方便自己復(fù)習(xí)詳細(xì)內(nèi)容會(huì)在之后一一對(duì)應(yīng)地補(bǔ)充上去有些在我的個(gè)人主頁筆記中也有相關(guān)記錄這里暫且放一個(gè)我的面試知識(shí)點(diǎn)目錄大家 寫在前面: 金三銀四, 又到了一年一度的跳槽季, 相信大家都在準(zhǔn)備自己面試筆記, 我也針對(duì)自己工作中所掌握或了解的一些東西做了一個(gè)目錄總結(jié),方便自...

    enda 評(píng)論0 收藏0
  • 前端知識(shí)歸納

    摘要:繼承性子標(biāo)簽會(huì)繼承父標(biāo)簽樣式優(yōu)先級(jí)行內(nèi)樣式選擇器類選擇器標(biāo)簽選擇器通配符繼承機(jī)制創(chuàng)建了的元素中,在垂直方向上的會(huì)發(fā)生重疊。 技能考察: 一、關(guān)于Html 1、html語義化標(biāo)簽的理解; 結(jié)構(gòu)化的理解; 能否寫出簡(jiǎn)潔的html結(jié)構(gòu); SEO優(yōu)化 a、理解:根據(jù)內(nèi)容的結(jié)構(gòu)化(內(nèi)容語義化),選擇合適的標(biāo)簽(代碼語義化)便于開發(fā)者閱讀和寫出更優(yōu)雅的代碼的同時(shí) 讓瀏覽器的爬蟲和...

    sixleaves 評(píng)論0 收藏0
  • 前端知識(shí)歸納

    摘要:繼承性子標(biāo)簽會(huì)繼承父標(biāo)簽樣式優(yōu)先級(jí)行內(nèi)樣式選擇器類選擇器標(biāo)簽選擇器通配符繼承機(jī)制創(chuàng)建了的元素中,在垂直方向上的會(huì)發(fā)生重疊。 技能考察: 一、關(guān)于Html 1、html語義化標(biāo)簽的理解; 結(jié)構(gòu)化的理解; 能否寫出簡(jiǎn)潔的html結(jié)構(gòu); SEO優(yōu)化 a、理解:根據(jù)內(nèi)容的結(jié)構(gòu)化(內(nèi)容語義化),選擇合適的標(biāo)簽(代碼語義化)便于開發(fā)者閱讀和寫出更優(yōu)雅的代碼的同時(shí) 讓瀏覽器的爬蟲和...

    NotFound 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<