es6 Generator Thunk函数实现自动执行

function *gen(){
    var res = yield 1+2;
    yield 2+3;
    yield 3+4;
}
var genFun = gen();

执行流程:
1、var result = genFun.next(); 只是将 yield后面的代码执行一下,返回到result中,这个时候还没有res什么事情呢。
2、再次调用genFun.next(param);然后才会将param赋值给res;并接着往下执行到2+3 这个表达式,然后又把这个结果传递出来。
*

generator函数中没有异步的自动执行函数

function run(genFun){
    this.next = function(data){
    var result = genFun.next();
    console.log("yield后面的表达式值是:",result.value);
    if(value.done) return;//如果执行完毕了,就return;
    next();//否则就再次调用next来取下一个value;
}
    next();
}
var gen = genFun();
run(gen);

执行结果:
这里写图片描述


generator函数中包括异步操作的自动执行函数
function *genFun(){
    let result = yield function(fun){
        setTimeout(fun({result:"data"}),1000);
    }
    console.log("异步操作的结果是:",result);
}
function run(genFun){
    this.next = function(data){
        let result = genFun.next(data);
        console.log("result value is ",result.value);//这里可以发现其实value是一个function,所以下面可以直接调用value();
        if(result.done) return;
        result.value(this.next);
    };
    next();
}
var gen = genFun();
run(gen);

这里写图片描述

结论

如果一个函数中包含异步操作,因为不确定什么时候会拿到值,所以就直接传递一个函数接收结果,并在适当的时候调用这个函数,然后并对结果进行处理就可以了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值