javascript 一个简单的队列,一次限制X同时异步函数执行。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 一个简单的队列,一次限制X同时异步函数执行。相关的知识,希望对你有一定的参考价值。
const createQueue = (maxOutstanding = 10, log) => {
const queue = []
let outstanding = 0
async function scheduleWork() {
if ((outstanding >= maxOutstanding) || queue.length === 0) return
outstanding++
const { func, args, resolve, reject } = queue.shift()
try {
log && log('[Q] WORK STARTED:', outstanding, queue.length)
resolve(await func(...args)) // handle async AND sync functions
} catch (err) {
log && log('[Q] !! WORK ERROR:', err.message, func.name)
reject(err)
}
outstanding--
log && log('[Q] WORK ENDED: ', outstanding, queue.length)
scheduleWork() // schedule next func exec
}
return (func) => (...args) => {
return new Promise((resolve, reject) => {
queue.push({ func, args, resolve, reject })
scheduleWork() // schedule next func exec
})
}
}
try { module.exports = createQueue } catch (ignore) {}
以上是关于javascript 一个简单的队列,一次限制X同时异步函数执行。的主要内容,如果未能解决你的问题,请参考以下文章
基础JavaScript练习总结
Javascript 或 jQuery 中的线程安全队列
JavaScript 实现栈和队列的操作(ES5ES6)
JavaScript数据结构——队列的实现
forEach循环中的Javascript API队列
高性能JavaScript(DOM编程)快速响应的用户界面