vue-django
Version:
个人实验项目, 本框架的目标是借鉴并超越django admin的自动化思想, 实现UI前端的极简快速定制开发
29 lines (28 loc) • 1.1 kB
JavaScript
/**
* Created by denishuang on 2019/1/13.
*/
/**
* @params list {Array} - 要迭代的数组
* @params limit {Number} - 并发数量控制数
* @params asyncHandle {Function} - 对`list`的每一个项的处理函数,参数为当前处理项,必须 return 一个Promise来确定是否继续进行迭代
* @return {Promise} - 返回一个 Promise 值来确认所有数据是否迭代完成
*/
let queueLimit = (list, limit, asyncHandle) => {
let recursion = (arr) => {
return asyncHandle(arr.shift())
.then(() => {
if (arr.length !== 0) return recursion(arr) // 数组还未迭代完,递归继续进行迭代
else return 'finish'
})
};
let listCopy = [].concat(list)
let asyncList = [] // 正在进行的所有并发异步操作
if ( limit > list.length){
limit = list.length
}
while (limit--) {
asyncList.push(recursion(listCopy))
}
return Promise.all(asyncList) // 所有并发异步操作都完成后,本次并发控制迭代完成
}
export default queueLimit