Как получить конечный результат нескольких асинхронных запросов одновременно
Создайте два новых файла в папке file: name.txt
, age.txt
, напишите текст соответственно
Мы можем использовать функцию обратного вызова для достижения эффекта:
// 多个异步请求 如何同时获取最终结果
let fs = require("fs");
let person = {
};
let index = 0;
const cb = () => {
if (++index === 2) {
console.log("person--->", person);
}
};
fs.readFile("./file/name.txt", "utf-8", function (err, data) {
console.log("name.txt--->", err, data);
person.name = data;
cb();
});
fs.readFile("./file/age.txt", "utf-8", function (err, data) {
console.log("age.txt--->", err, data);
person.age = data;
cb();
});
Run Code
Тогда мы можем получить данные двух асинхронных запросов одновременно:
Мы также можем написать более обобщенно
// 多个异步请求 如何同时获取最终结果
let fs = require("fs");
let person = {
};
function after(times, callback) {
// 闭包函数:函数的定义的作用域跟函数执行的作用域不在同一个作用域下
return function () {
if (--times === 0) {
callback();
}
};
}
const cb = after(2, function () {
console.log("after--person--->", person);
});
fs.readFile("./file/name.txt", "utf-8", function (err, data) {
console.log("name.txt--->", err, data);
person.name = data;
cb();
});
fs.readFile("./file/age.txt", "utf-8", function (err, data) {
console.log("age.txt--->", err, data);
person.age = data;
cb();
});