haizlin/fe-interview

[js] 第635天 实现一个批量请求函数 multiRequest(urls, maxNum)

Opened this issue · 2 comments

第635天 实现一个批量请求函数 multiRequest(urls, maxNum)

作者:巴扎嘿

3+1官网

我也要出题

实现一个批量请求函数 multiRequest(urls, maxNum),要求最大并发数 maxNum,每当有一个请求返回,就留下一个空位,可以增加新的请求,所有请求完成后,结果按照 urls 里面的顺序依次打出。

function multiRequest(urls, maxNum) {
  let list = urls.map((url, index) => {
    if (index < maxNum) {
      return function () {
        return axios.get(url)
      }
    }
    return null
  }).filter(item => !!item)
  return Promise.all(list).then(result => {
    console.log(result)
  })
}
function multirquest(arr, nums) {
	if (!arr.length) {
		return
	}
	let result = []
	Promise.all({ length: nums }).map(() => {
		return new Promise(() => {
			function runTask() {
				if (!arr.length) {
					resolve('throw  Error')
					return
				}
				const _task = arr.shift()
				_task().then((v) => {
					result.push(v)
					// 继续链式执行promise
					runTask()
				})
			}
			runTask()
		})
	})
}
limitPromise(
	[
		{
			size: 1000,
			page: 1,
		},
		{
			size: 1000,
			page: 2,
		},
		{
			size: 1000,
			page: 3,
		},
	],
	1,
	(eee) => {
		console.log(eee)
	}
)