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)
