码迷,mamicode.com
首页 > 其他好文 > 详细

generator

时间:2020-02-10 18:04:50      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:dirname   方法   name   his   es6   sync   yield   block   语法   

generator

生成器,生成迭代器的,es6语法。迭代器有next方法,方法执行后需要返回value,done

1.用法

//返回值叫迭代器,迭代器有next方法,方法执行后需要返回value,done。
function * read(){
  yield 1;//产出,每次遇到yield停住
  yield 2;
  yield 3;
}
let it=read();
console.log(it.next());//{value:1,done:false}
console.log(it.next());
console.log(it.next());
console.log(it.next());//{value:undefined,done:true}

2. ...扩展类数组 和 for...of

原理就是调用 [Symbol.iterator] 生成迭代器

let obj = {
   0: 1,
   1: 2,
   length: 2,
   [Symbol.iterator]: function * () {
     let index=0;
     while(index!=this.length){
       yield this[index++];
     }
   }
 }
 console.log(...obj);//1,2

3.async+await原理

//实现函数co
 //name.txt:age.txt
 //age.txt:10
 const fs = require('fs').promises;
 
 function* read() {
   let content = yield fs.readFile(__dirname+'/name.txt', 'utf8');
   let age = yield fs.readFile(__dirname+'/'+content, 'utf8');
   return age;
 }

 co(read()).then(res => console.log(res))//10

 //co
 let co = (it) => new Promise((resolve, reject) => {
   let next = (v) => {
     let { value, done } = it.next(v);
     return done ? resolve(value) : Promise.resolve(value).then(next, reject);
   }
   next(undefined);
 })

generator

标签:dirname   方法   name   his   es6   sync   yield   block   语法   

原文地址:https://www.cnblogs.com/wangshouren/p/12291763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!