UNPKG

vue-django

Version:

个人实验项目, 本框架的目标是借鉴并超越django admin的自动化思想, 实现UI前端的极简快速定制开发

29 lines (28 loc) 1.1 kB
/** * 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