IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    用 bluebird 来运行控制 async function

    andyhu发表于 2016-06-26 17:00:09
    love 0

    最近写了不少 async await 的代码。但是发现有一个问题,就是如果需要并行执行一定数量的 async function,不知如何来控制 concurrency 同时执行的最大数量。想到 bluebird 中有现成的 .map 之类的方法可以控制 concurrency,遂进行了如下尝试,希望借此抛砖引玉,有更好的方法的话欢迎回帖!

    import sleep from 'then-sleep';
    import Promise from 'bluebird';
    const asyncToPromise = func => {
      return (...args) => Promise.try(async () => await func.apply(this, args));
    };
    
    const sleepAsync = async (ms) => {
      console.time(`sleep ${ms}ms`);
      await sleep(ms);
      console.timeEnd(`sleep ${ms}ms`);
    };
    
    console.time('total');
    Promise.map([1000, 2000, 3000], (ms) => asyncToPromise(sleepAsync)(ms), { concurrency: 1 })
      .then(() => console.timeEnd('total'));
    


沪ICP备19023445号-2号
友情链接