美文网首页
ES6 generator状态机要点记录

ES6 generator状态机要点记录

作者: 拉面的无聊时光 | 来源:发表于2017-12-28 14:22 被阅读0次

throw 方法

try,catch()捕获内部错误后,还会执行一次next()

var gen = function* gen(){
try {
yield console.log('a');
} catch (e) {
// ...
}
yield console.log('b');
yield console.log('c');
}
var g = gen();
g.next() // a
g.throw() // b
g.next() // c

return 提前结束

如果在try{}finally(){}语句中try{}里面return 那么就会推迟的finally结束

yield*语法

yield [1,2,3,4,5,6] 返回的时整个数组;
yield* [1,2,3,4,5,6] 返回123456(寻找遍历器)
yield 'hello' 返回的时整个字符串;
yield* [1,2,3,4,5,6] 返回单个字符(寻找遍历器)  

function* foo(){
    yield 2;
    yield 3;
    yield 'foo';//return 'foo';会有不同效果
}
function* bar(){
    yield 1;
    var v = yield *foo();
    console.log('v: '+v);
    return 4;
}
var it = bar();
console.log(it.next())
console.log(it.next())
console.log(it.next())
console.log(it.next())
console.log(it.next())

generator函数不是构造函数,可以变通,既有this属性,也有next方法

function* gen(){yield this.a = 1;}
function F(gen){return gen.call(gen.prototype)
var f = new F(gen)
f.next()
console.log(f)

async generator语法糖

  function gen(a){
    let gen = (function* (){
        var a = yield promise(22)
        console.log(a)
        var b = yield promise(44)
        console.log(b)
    })();

    return new Promise((resolve,reject)=>{//执行器
        callNextStep(a)
        function callNextStep(res) {
          let result;
          try {  //防止generator函数抛出错误
            Promise.resolve(res).then((data)=>{
                result = gen.next(data);
                next(result);
            }).catch(e=>{  //防止yield后面promise抛出错误
              return reject(e);
            })
          } catch (e) {
              return reject(e);
          }
        }
        function next({done,value}) {
            if(done){
                resolve(value)
            }else{
                callNextStep(value)
            }

        }
    })
}
gen().catch((e)=>{
    console.log('错误 ',e)
})

相关文章

  • ES6 generator状态机要点记录

    throw 方法 try,catch()捕获内部错误后,还会执行一次next() return 提前结束 如果在t...

  • ES6-Generator可暂停函数

    Generator函数 ES6提供的解决异步编程的方案之一 Generator函数是一个状态机,内部封装了不同状态...

  • Generator函数学习笔记

    Generator 函数是 ES6 提供的一种异步编程解决方案。Generator 函数可以理解为是一个状态机,封...

  • ES6之Generator函数

    Generator函数,ES6新增的函数,通过这个函数可以控制函数的执行步骤,也有说这是一个状态机,内部封装...

  • Koa基础 Generator函数

    Generator 函数的特性 Generator 函数是一个状态机,封装了多个内部状态。 Generator 函...

  • ES6 Generator

    Generator:一种异步编程解决方案 概念:Generator:状态机,封装了多个内部状态Generator ...

  • Generator函数

    概念:1、ES6提供的解决异步编程的方案之一2、Generator函数是一个状态机,内部封装了不同状态的数据,3、...

  • 2018-01-26 ES6 阮一峰教程摘记12 Generat

    Generator函数的语法 1.简介 该函数是ES6的一种异步编程的解决方案, 状态机(封装多个状态)、会返回一...

  • ES6——generator函数(一)

    概念:1、ES6提供的解决异步编程的方案之一2、Generator函数是一个状态机,内部封装了不同状态的数据,3、...

  • 16Generator函数的方法

    简介 基本概念 Generator 是 ES6 提供的一种异步编程解决方案。可以把它理解成一个状态机,并且会返回一...

网友评论

      本文标题:ES6 generator状态机要点记录

      本文链接:https://www.haomeiwen.com/subject/qsfvgxtx.html