3 # 通过回调函数处理异步并发问题

简介: 3 # 通过回调函数处理异步并发问题

如何同时获取多个异步请求的最终结果

在文件夹 file 里新建两个文件:name.txtage.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();
});

目录
相关文章
|
前端开发
异步转同步的几种方法
在循环等待中,我们可以使用一个变量来指示异步操作是否已完成。然后,我们可以在循环中检查该变量,如果它指示异步操作已完成,则退出循环。
552 0
|
6天前
|
前端开发 JavaScript
如何使用 Promise 处理异步并发操作?
通过使用 `Promise.all()` 和 `Promise.race()` 方法,可以灵活地处理各种异步并发操作,根据不同的业务需求选择合适的方法来提高代码的性能和效率,同时也使异步代码的逻辑更加清晰和易于维护。
|
5月前
|
Java
java线程之异步回调
java线程之异步回调
|
6月前
|
Python
同步和异步的区别
同步和异步的区别
|
JavaScript 前端开发 UED
同步和异步区别
同步和异步区别
151 0
|
6月前
|
前端开发 JavaScript
同步和异步有什么区别
同步和异步有什么区别
216 0
同步和异步[多线程的异步执行操作]
同步和异步[多线程的异步执行操作]
52 0
阻塞式/非阻塞式与同步/异步的区别
阻塞式/非阻塞式与同步/异步的区别
89 0
理解阻塞、非阻塞与同步、异步的区别
理解阻塞、非阻塞与同步、异步的区别
理解阻塞、非阻塞与同步、异步的区别
回调函数是异步吗?回调函数和异步操作的关系
回调函数是异步吗?回调函数和异步操作的关系