尼采般地抒情

尼采般地抒情

尼采般地抒情

音乐盒

站点信息

文章总数目: 316
已运行时间: 1570

前言:使用Typescript编写如下函数功能 并发控制函数 要求控制任务执行的并发上限为concurrency

/*
 * @Author: wztlink1013
 * @Date: 2022-07-25 19:57:09
 * @LastEditTime: 2022-07-25 19:57:22
 * @Description:
 */
// Practice 1
const test_1 = () => {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log('2000')
      let myDate = new Date()
      console.log('---- ', myDate.toTimeString().substring(0, 8), ' ----')
      resolve(2000)
    }, 2000)
  })
}
const test_2 = () => {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log('3000')
      let myDate = new Date()
      console.log('---- ', myDate.toTimeString().substring(0, 8), ' ----')
      resolve(3000)
    }, 3000)
  })
}
const test_3 = () => {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log('4000')
      let myDate = new Date()
      console.log('---- ', myDate.toTimeString().substring(0, 8), ' ----')
      resolve(4000)
    }, 4000)
  })
}

let arr = [test_1, test_2, test_3]

async function parallel(
tasks: (() => void)[],
concurrency: number
): Promise<void> {
const ret: any[] = []
const executing: any[] = []

let myDate = new Date()
console.log(‘—-start ‘, myDate.toTimeString().substring(0, 8), ‘ —-‘)

for (const item of tasks) {
const p = Promise.resolve().then(item)
ret.push(p)

if (concurrency &lt;= tasks.length) {
  const e: any = p.then(() =&gt; executing.splice(executing.indexOf(e), 1))
  executing.push(e)
  if (executing.length &gt;= concurrency) {
    await Promise.race(executing)
  }
}

}
// return Promise.all(ret);
}
parallel(arr, 2)

参考:

评论区