Caolan McMahon 的 async 是一个出现较早的用于 Node.js 中异步流程控制的库。它提供了一些进行异步操作控制的帮助工具,比如:
mapLimit, filterLimit, concatLimit,
以及 priorityQueue。
如果你不打算重新发明轮子,不想把同样的逻辑自己再实现一遍,并且愿意信赖这个经过实践检验的、每月下载量高达 5000 万的库,你可以结合 util.promisify 简单地重用这些函数:
const util = require('util') const async = require('async') const numbers = [ 1, 2, 3, 4, 5 ] mapLimitAsync = util.promisify(async.mapLimit) async function main () { return await mapLimitAsync(numbers, 2, (number, done) => { setTimeout(function () { done(null, number * 2) }, 100) }) } main() .then(console.log) .catch(console.error)