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

目录
相关文章
|
4月前
|
XML 存储 数据库
Python中的xmltodict库
xmltodict是Python中用于处理XML数据的强大库,可将XML数据与Python字典相互转换,适用于Web服务、配置文件读取及数据转换等场景。通过`parse`和`unparse`函数,轻松实现XML与字典间的转换,支持复杂结构和属性处理,并能有效管理错误。此外,还提供了实战案例,展示如何从XML配置文件中读取数据库连接信息并使用。
Python中的xmltodict库
|
9月前
|
机器学习/深度学习 自然语言处理 算法
Python提供了丰富的库和工具
【6月更文挑战第13天】Python提供了丰富的库和工具
64 5
|
5月前
|
算法 数据可视化 计算机视觉
Python中医学图像处理常用的库
在Python中,医学图像处理常用的库包括:ITK(及其简化版SimpleITK)、3D Slicer、Pydicom、Nibabel、MedPy、OpenCV、Pillow和Scikit-Image。这些库分别擅长图像分割、配准、处理DICOM和NIfTI格式文件、图像增强及基础图像处理等任务。选择合适的库需根据具体需求和项目要求。
178 0
|
6月前
|
机器学习/深度学习 数据采集 算法框架/工具
python有哪些常用的库和框架
【9月更文挑战第2天】python有哪些常用的库和框架
160 6
|
7月前
|
机器学习/深度学习 JSON 数据挖掘
什么是 Python 库?
【8月更文挑战第29天】
443 4
|
7月前
|
JSON 数据可视化 BI
我常用的5个Python可视化库
我常用的5个Python可视化库
88 2
|
7月前
|
机器学习/深度学习 算法 TensorFlow
python常用组件库
Python 有很多优秀的组件库,它们可以帮助开发者快速构建功能丰富的应用程序。
77 2
|
8月前
|
Shell 数据库 Python
安装graphene库
安装graphene库
|
10月前
|
数据可视化 Python
pycallgraph,一个好用的 Python 代码可视化库!
pycallgraph,一个好用的 Python 代码可视化库!
584 7