es6 --- > co模块的源码

function co(gen) {
    var ctx = this;
     
    return new Promise(function(resolve, reject) {
        if (typeof gen === 'function') gen = gen.call(ctx);
        if (!gen || typeof gen.next !== 'function') return resolve(gen);
    
        onFulffilled();
        function onFulfilled(res) {
           var ret;
           try {
               ret = gen.next(res);
           } catch (e) {
               return reject(e);
           }
           next(ret);
       }
   });
}
function next(ret) {
    if (ret.done) return resolve(ret.value);
    var value = toPromise.call(ctx, ret.value);
    if (value && isPromise(value)) return value.then(onFulfilled, onRejected);
    return onRejected(
        new TypeError(
            'You may only yield a function, promise, generator, array, or object, '
            + 'but the following object was passed: "'
            + String(ret.value)
            + '"'
        )
    );
)

// 调用
co(function* () {
    var res = yield [
         Promise.resolve(1),
         Promise.resolve(2)
     ];
     console.log(res);
 }).catch(onerror)
 

参考《ES6标准入门》(第3版)P371~P372

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值