generator执行过程

迭代器函数的定义 迭代器中需要返回一个对象这个对象中需要有一个next方法,next方法调用后,可以返回一个对象对象中有两个参数 第一个done value迭代出的结果

function * a() {
  let x = yield 100;
  console.log('x',x);
  let y = yield 200;
  console.log(y);
  let z = yield 300;
  return z
}


// let flag = false;
// do {
//   let {done,value} = it.next();
//   console.log(value);
//   flag = done;
// } while (!flag);

co

let fs = require('mz/fs');
// let co = require('co');
//  generator  => async + await

function * read() { // 可以暂停 可以支持promise 
  let age = yield fs.readFile('./name.txt','utf8');
  let adress = yield fs.readFile(age,'utf8');
  let r = yield fs.readFile(adress,'utf8');
  return r;
}

function co(it) {
  return new Promise((resolve,reject)=>{
     // 异步线性执行怎么实现 koa express
    function next(data) {
      let { value, done } = it.next(data);
       if(!done){
         value.then(data=>{
           next(data)
         }, reject);
       }else{
         resolve(value);
       }
     }
     next();
  })
}

co(read()).then(data=>{
  console.log(data);
},err=>{
  console.log(err);
});

// let it = read();
// it.next().value.then(data=>{
//   it.next(data).value.then(data=>{
//     it.next(data).value.then(data=>{
//       console.log(it.next(data).value);
//     })
//   })
// })

Maldivee
145 声望4 粉丝

如果你能看到我的梦想,请给我前行的力量,幸运是忠诚的祈祷,是光穿梭的暗道