用 bluebird 来运行控制 async function
发布于 18 分钟前 作者 andyhu 13 次浏览 来自 分享

最近写了不少 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'));
回到顶部