走走停停

文章 评论 浏览 30

走走停停∥ 2022-05-04 13:54:20
/**
 *  想法是先构造好请求的一个对象, 包含请求方法, 请求状态, 请求的响应, 通过传入的urls创建出一个请求队列, 第一次就发maxNum个请求,
 *  然后在每个请求完成后, 从请求队列取出状态为0的去请求, 最后所有请求完则返回
 */
function multiRequest(urls, maxNum) {
  return new Promise((resolve, reject) => {
    const queenArr = urls.map(url => {
      const tempObj = {
        request: () => {
          const t = Math.random() * 5000
          tempObj.status = 1
          console.log(queenArr.map(i => i.status));
          setTimeout(() => {
            tempObj.status = 2
            tempObj.response = `请求的url为${url}, 延迟为${t}`
            const req = getRequest()
            if (req) {
              req()
            } else if(queenArr.filter(i => i.status === 1).length === 0) {
              console.log(queenArr.map(i => i.status));
              resolve(queenArr.map(i => i.response))
            }
          }, t)
        },
        status: 0, // 0, 1, 2, 表示请求状态
        response: url
      }
      return tempObj
    })

    // 从请求队列中获取到第一个还未请求的任务
    const getRequest = () => {
      const reqTask = queenArr.filter(i => i.status === 0)[0]
      return reqTask && reqTask['request']
    }
    for (let i = 0; i < maxNum; i++) {
      const req = queenArr[i]
      req && req.request()
    }
  })
}

const urls = ['1', '2', '3', '4', '5']

multiRequest(urls, 2).then((res) => {
  console.log(res)
})

第 153 题:实现一个批量请求函数 multiRequest(urls, maxNum)

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文