极客时间对于推广渠道会有返利优惠,比如山月在极客时间买了一门课,再把课程分享给好友购买,这时极客时间会向山月返利20元左右。
而我现在做了一个返利平台,你可以在上边通过山月的链接购买课程,此时极客时间会向我返利。为了共同学习,而你可以添加我的微信 (shanyue94),我将把极客时间给我的返利发一个红包全部返给你

# 如何实现 promise.map,限制 promise 并发数

更多描述

实现一个 promise.map,进行并发数控制,有以下测试用例

pMap([1, 2, 3, 4, 5], x => Promise.resolve(x + 1))

pMap([Promise.resolve(1), Promise.resolve(2)], x => x + 1)

// 注意输出时间控制
pMap([1, 1, 1, 1, 1, 1, 1, 1], x => sleep(1000), { concurrency: 2 })

Issue

欢迎在 Issue 中交流与讨论: Issue 89 (opens new window)

以下代码见 如何实现 promise.map - codepen (opens new window)

function pMap(list, mapper, concurrency = Infinity) {
  // list 为 Iterator,先转化为 Array
  list = Array.from(list)
  return new Promise((resolve, reject) => {
    let currentIndex = 0
    let result = []
    let resolveCount = 0
    let len = list.length
    function next() {
      const index = currentIndex
      currentIndex++
      Promise.resolve(list[index]).then(o => mapper(o, index)).then(o => {
        result[index] = o
        resolveCount++
        if (resolveCount === len) { resolve(result) }
        if (currentIndex < len) { next() }
      })
    }
    for (let i = 0; i < concurrency && i < len; i ++) {
      next()
    }
  })
}

关于山月

我的项目:
我的微信:shanyue94,欢迎交流
Last Updated: 7/31/2021, 3:04:10 PM