文章 评论 浏览 30
/** * 想法是先构造好请求的一个对象, 包含请求方法, 请求状态, 请求的响应, 通过传入的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) })
文章 0 评论 0
接受
第 153 题:实现一个批量请求函数 multiRequest(urls, maxNum)