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();
});

目录
打赏
0
0
0
0
21
分享
相关文章
C#异步详解
c#异步编程原理,await asnyc的使用方法
76 0
阻塞式/非阻塞式与同步/异步的区别
阻塞式/非阻塞式与同步/异步的区别
119 0
同步 异步 阻塞 非阻塞
在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下:  序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 散仙不才,在查了一部分资料后,愿试着以通俗易懂的方式
1900 1
3:C#异步WaitAll的使用
编写界面如图: private async void button1_Click(object sender, EventArgs e) { #region 单个执行的异步,效率慢 HttpClient wc = new HttpClient(); string s1 = await wc.
1302 0
同步、异步、阻塞、非阻塞
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication) 真正意义上的 异步IO 是说内核直接将数据拷贝至用户态的内存单元,再通知程序直接去读取数据。
1018 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等