Async 是一个直截了当、强大的异步 JavaScript 实用工具模块。
尽管最初是设计用于 Node.js,可通过 npm i async 安装,但它也可以直接用于浏览器。
async 包里也包含了 ESM/MJS 版本,可以自动用于类似 Webpack、Rollup 的兼容打包工具。
此外还有一个纯 ESM 版本的 Async:async-es。
中文文档正在翻译中,英文文档可访问 https://caolan.github.io/async/
Async v1.5.x 英文文档, 点击此处
// 使用 Node 回调风格……
var async = require("async");
var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"};
var configs = {};
async.forEachOf(obj, (value, key, callback) => {
fs.readFile(__dirname + value, "utf8", (err, data) => {
if (err) return callback(err);
try {
configs[key] = JSON.parse(data);
} catch (e) {
return callback(e);
}
callback();
});
}, err => {
if (err) console.error(err.message);
// configs 现在是 JSON 数据映射
doSomethingWith(configs);
});var async = require("async");
// ...或者 ES2017 async functions
async.mapLimit(urls, 5, async function(url) {
const response = await fetch(url)
return response.body
}, (err, results) => {
if (err) throw err
// 现在 results 是返回的 response.body 数组
console.log(results)
})