生成器 生成迭代器的
1 | // 返回值叫迭代器 |
将类数组转化成数组
1 | // 类数组的定义: 1 索引 2 长度 |
如果想要可用 如下 提供一个方法
1 | function add(){ |
继续完善
1 | function add(){ |
继续完善 将迭代器 改为生成器
1 | function add(){ |
… 会调这里的line7 Symbol.iterator方法,没这方法就不会循环
1 | // 比如说 |
可以在console.log里面打印[] 查看数组有Symbol.iterator 迭代器
1 | function *read(){ |
如图所示为执行顺序:
执行结果:
1 | 1. { value: 1, done: false } |
所以打印出来这里的a是undefined 要想a有值,可以如下
1 | function *read(){ |
现在我想要第二次调用的时候报错 如下:
1 | function *read(){ |
现在理解了上面的原理之后 ,现在我们来读取文件内容
示例
现在在name.txt里面放“age.txt” , age.txt文件里面放“18”
1 | const fs = require('fs').promises; |
这里代码从哪里走到哪里 如图 这里面yield的值 是后面产生的value ,value产生的是个promise
现在只考虑then成功的情况
1 | const fs = require('fs').promises; |
co库
安装yarn add co 可以去github上看下这个库
1 | const fs = require('fs').promises; |
手写co的实现原理
1 | const fs = require('fs').promises; |
async await
1 | const fs = require('fs').promises; |
还可以这样捕获错误
1 | const fs = require('fs').promises; |
async + await 其实是generator + co的语法糖