美文网首页
promise 并发限制

promise 并发限制

作者: 宏_4491 | 来源:发表于2023-04-24 14:29 被阅读0次

在开发中遇到连续上传图片视频,或者预加载图片等情况,我们就要用到并发限制

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
</html>
<script>


//异步promise
  function sleep(delay,msg ) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log(msg);
        resolve();
      }, delay);
    });
  }
  //请求列表
  const tasks = [
    () => sleep(1000, "起床啦"),
    ()=>{
      console.log("中间上厕所一次")
      console.log("中间上厕所二次")
    },
    () => sleep(2000, "吃早餐啦"),
    () => sleep(3000, "打游戏啦"),
    () => sleep(4000, "写代码"),
    () => sleep(6000, "做运动啦"),
    () => sleep(8000, "睡觉啦"),
  ];
  //限制并发
  async function doSomeThing(tasks, limit = 2) {
    const taskPool = new Set();
    for (const task of tasks) {
      const promise = task();
      p = Promise.resolve(promise) // 考虑到如果不是promise情况
      taskPool.add(p);
      p.then(() => taskPool.delete(p));
      if (taskPool.size >= limit) {
        await Promise.race(taskPool);
      }
    }
    return Promise.all(taskPool)
  }

  doSomeThing(tasks).then(()=>{
    console.log("endout!!!!")
  })
</script>

每次触发两个请求, 等上面两个异步执行完毕再执行后两个依次循环到最后


image.png

相关文章

网友评论

      本文标题:promise 并发限制

      本文链接:https://www.haomeiwen.com/subject/zwpujdtx.html