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 函数库的含义和用法

目录
相关文章
|
存储 设计模式 分布式计算
全量、增量、流水、拉链、快照、代理键、缓慢变化维...
全量、增量、流水、拉链、快照、代理键、缓慢变化维...
|
监控 安全 数据安全/隐私保护
服务器管理
服务器管理
409 5
|
11月前
|
安全 网络安全 数据安全/隐私保护
|
存储 安全 编译器
【C语言】memcpy,memmove,memcmp,memset函数详解
【C语言】memcpy,memmove,memcmp,memset函数详解
【C语言】memcpy,memmove,memcmp,memset函数详解
|
存储 Rust 安全
Rust中的Vector:多值存储的利器
Rust中的Vector:多值存储的利器
185 0
|
数据可视化 搜索推荐 JavaScript
SonarQube:解析代码质量,提升开发效率
在软件开发领域,代码质量管理是至关重要的。本文将介绍静态代码分析工具 SonarQube 的概念与实践,探讨其在代码质量管理中的作用和优势。我们将深入理解 SonarQube 的工作原理,了解如何通过该工具检测、评估和改善代码质量,以提高软件开发效率和可维护性。
|
人工智能 安全 Anolis
Intel 技术总监:同心共行,共建龙蜥 | 2023 龙蜥操作系统大会
Intel 发布新的至强芯片,都会第一时间支持龙蜥,甚至一些芯片特性的支持,在国际上都处于领先地位。
|
SQL 监控 Java
Flink OLAP 在字节跳动的查询优化和落地实践
字节跳动基础架构工程师何润康在 Flink Forward Asia 2022 核心技术专场的分享。
502 0
Flink OLAP 在字节跳动的查询优化和落地实践
|
前端开发 Cloud Native 应用服务中间件
深入解析 Nginx 代理配置:从 server 块到上游服务器的全面指南
深入解析 Nginx 代理配置:从 server 块到上游服务器的全面指南
886 0