美文网首页
generator 使用注意事项

generator 使用注意事项

作者: 说好的幸福2020 | 来源:发表于2019-07-01 15:34 被阅读0次

记录下使用generator的注意点
1 generator使用this如何处理

function * gen(){
    yield this.ajaxPost();
    yield this.ajaxGet();
    return something
}
es6 普通函数,使用严格模式,this为undefined
所有generator函数的执行是返回遍历器对象(iterator),
使用如下方式绑定外围this
let g_iterator = gen.call(this)   // this为外围this

2 yield参与运算
    yield语句如果参与运算,必须用括号括起来,并且是右侧表达式的结果参与运算
    console.log(3 + yield 4); // 语法错误
    console.log(3 + (yield 4)); // 打印7

3  next方法可以有参数
    一句话说,next方法参数的作用,是为上一个yield语句赋值。由于yield永远返回undefined如果有了next方法的参数,上一次的yield赋值变量就被赋了值。比如下例,原本a变量的值是undefined,但是有了next的参数,a变量现在等于next的参数,也就是9。

function* g() {
     var o = 1;
     var a = yield o++;           //  yield右侧表达式的值为执行next时返回的{value:此处 的值}
     console.log('a = ' + a);
     var b = yield o++;
}
var gen = g();
 console.log(gen.next());
 console.log(gen.next(9)); 

4 Generator.prototype.return()
    该方法,可以返回给定的值,并且终结遍历Generator函数

function* gen() {
     yield 1;
     yield 2;
     yield 3;
    return 666
 }
 var g = gen();
 console.log(g.next()); // { value: 1, done: false }
 console.log(g.return('foo')); // { value: "foo", done: true } 上面定义的 return 666 就不起作用了
 console.log(g.next()); // {value: undefined, done: true}

相关文章

网友评论

      本文标题:generator 使用注意事项

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