generator 和 co模块
Posted coding4
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了generator 和 co模块相关的知识,希望对你有一定的参考价值。
// 类数组的生成器
// 类数组的生成器 function fns() let obj = 0:1,1:2,2:3,length: 3, [Symbol.iterator]: function() let index = 0; let that = this; return next() return value: that[index], done: index++ === that.length let arr = [...obj]; console.log(Array.isArray(arr), arr); // 自动执行next function fns() // 给类数组添加迭代方法 let obj = 0:1,1:2,2:3,length: 3, [Symbol.iterator]: function() let index = 0; let that = this; while(index === that.length) yield that[index++] let arr = [...obj]; console.log(Array.isArray(arr), arr); fns(1,2,3,4,5)
#### co模块
// generator + promise 来使用 let fs = require(‘fs‘).promises; // promise 要通过then generator 可以省略then方法 function* read() // try let content = yield fs.readFile(‘./name.txt‘,‘utf8‘); let age = yield fs.readFile(content,‘utf8‘); let a = yield age + 100; return a; // catch(err) // console.log(err); // // co 库 function co(it) return new Promise((resolve,reject)=> // 异步迭代 next function next(data) let value,done = it.next(data); if(!done) Promise.resolve(value).then(data=> next(data) ,reject); else resolve(value); next(); ); co(read()).then(data=> console.log(data); );
#### 第一次next无效,并且停止到yield的地方。next里的值会复制给yield复制给的值。
以上是关于generator 和 co模块的主要内容,如果未能解决你的问题,请参考以下文章
async(await)函数和 Generator 函数 区别
Python标准模块--Iterators和Generators