代码片段
⌈工具⌋ 在队列中执行异步函数
使用async\await实现队列执行
            
            
              javascript
              
              
            
          
          /**
 * 队列执行函数
 * @param asyncFunction 异步函数
 * @param items  参数数组
 * @param maxConcurrent  最大并发数
 * @returns 结果数组
 */
async executeAsyncFunctionInQueue<T, K>(
  asyncFunction: (item: K, index: number) => Promise<T>,
  items: K[],
  maxConcurrent: number = 10
): Promise<Array<T | Error>> {
  const queue = [...items]
  const results: Array<T | Error> = new Array(items.length)
  const executing = new Set<Promise<void>>()
  const executeNext = async (): Promise<void> => {
    if (queue.length === 0) return
    const currentIndex = items.length - queue.length
    const item = queue.shift()!
    const promise = (async () => {
      try {
        const result = await asyncFunction(item, currentIndex)
        results[currentIndex] = result
      } catch (error) {
        results[currentIndex] =
          error instanceof Error ? error : new Error(String(error))
      }
    })()
    executing.add(promise)
    await promise
    executing.delete(promise)
    if (queue.length > 0) {
      await executeNext()
    }
  }
  const workers = Array.from(
    { length: Math.min(maxConcurrent, queue.length) },
    () => executeNext()
  )
  await Promise.all(workers)
  return results
}
        2025-01-03