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编程)快速响应的用户界面