24 # co 库的实现

简介: 24 # co 库的实现

下面实现 co 库核心优化一下上节的这段代码

const fs = require("fs").promises;
// 代码更像是同步的,但是执行还是异步的
function* read() {
    let name = yield fs.readFile("./file/name.txt", "utf-8");
    let age = yield fs.readFile("./file/age.txt", "utf-8");
    return { name, age };
}
// 下面是需要优化的代码
let it = read();
let { value, done } = it.next();
value.then((data1) => {
    console.log("name---->", data1);
    let { value, done } = it.next(data1);
    value.then((data2) => {
        let { value, done } = it.next(data2);
        console.log("age---->", data2);
        console.log("return---->", value);
        // 还可以抛出异常
        // it.throw("泰裤辣");
    });
});

简单实现一下 co 库:能将 generator 函数变成一个 promise 返回

const co = (it) => {
    return new Promise((resolve, reject) => {
        // 异步迭代靠的是回调函数
        function next(data) {
            let { value, done } = it.next(data);
            if (!done) {
                // value 可能不是promise,需要包装一下
                Promise.resolve(value).then(next, reject);
            } else {
                resolve(value);
            }
        }
        // 先调用一次
        next();
    });
};
co(read()).then((data) => {
    console.log("data---->", data);
});

async await 替换掉了 generator 和 co,默认 async 函数执行后返回的就是一个 promise(async + await = generator + co)

co 库

推荐阅读阮一峰大佬的:co 函数库的含义和用法

目录
相关文章
|
存储 设计模式 分布式计算
全量、增量、流水、拉链、快照、代理键、缓慢变化维...
全量、增量、流水、拉链、快照、代理键、缓慢变化维...
|
安全 网络安全 数据安全/隐私保护
|
监控 安全 数据安全/隐私保护
服务器管理
服务器管理
508 5
|
存储 Kubernetes 监控
使用hashicorp Raft开发高可用服务
使用hashicorp Raft开发高可用服务
249 1
|
SQL 安全 网络安全
美国高防云服务器能防御哪些攻击? - 蓝易云
高防云服务器通常具有一定的防御能力,可以帮助抵御这些攻击。然而,防御的效果也取决于服务器的配置和管理,以及应用程序的安全性。
227 21
Java语言接口(Interface)的深入解析
Java语言接口(Interface)的深入解析
308 0
|
数据可视化 搜索推荐 JavaScript
SonarQube:解析代码质量,提升开发效率
在软件开发领域,代码质量管理是至关重要的。本文将介绍静态代码分析工具 SonarQube 的概念与实践,探讨其在代码质量管理中的作用和优势。我们将深入理解 SonarQube 的工作原理,了解如何通过该工具检测、评估和改善代码质量,以提高软件开发效率和可维护性。
|
SQL 存储 分布式计算
关于数据仓库的Hive的安装部署的内嵌模式
在数据分析和数据挖掘领域,数据仓库是一个非常重要的工具。Hive是阿里云提供的一个开源数据仓库解决方案,它基于Hadoop和HiveQL语言,可以帮助用户轻松地处理大规模数据。在本文中,我们将探讨Hive的安装部署以及内嵌模式的概念和优势。
539 2
EMQ
|
机器学习/深度学习 边缘计算 JSON
车联网 CAN Bus 协议介绍与数据实时流处理
CAN Bus 是一种串行通信协议,能够让设备之间可靠而高效地传输数据。本篇博客将探讨使用 CAN Bus 中遇到的挑战,以及如何用 eKuiper 和 MQTT 解决这些问题。
EMQ
806 0
车联网 CAN Bus 协议介绍与数据实时流处理

热门文章

最新文章