Generator + Promises, the best of all worlds in ES6

在之前的讨论中,我们展示了generator是如何的进行异步迭代的。这是建立在对杂乱无章的回调函数进行序列化的一次巨大的进步。但我们也失去了一些很重要的东西,也就是Promises的信任和组合。不要担心,我们现在就将两者结合起来使用。

回忆一下之前的基于promise的异步的例子

function foo(x,y) {
    return request(
        "http://some.url.1/?x=" + x + "&y=" + y
    );
}

foo( 11, 31 )
.then(
    function(text){
        console.log( text );
    },
    function(err){
        console.error( err );
    }
);
在之前的运行ajax例子的generator代码中,foo()返回undfined,并且我们的迭代控制器代码并不关心yielded的值。


但是基于promise的foo()在ajax call后返回一个promise对象,这暗示这里需要用foo()构建一个promise函数,然后从generator这边停止,然后迭代控制的代码将会收到promise对象。

那么迭代器是如何处理promise的呢?

它应该去监听promise对象resolve的状态(fulfillment or rejection),要么继续generator,要么抛出异常到generator。

最有效的利用promise和generator的方式是停止等待promise对象的返回,并且通过promise对象去控制generator的迭代器


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值