美文网首页
实现一个简单的co函数

实现一个简单的co函数

作者: 葶寳寳 | 来源:发表于2020-03-04 15:58 被阅读0次

coGenerator函数的自动执行器。它会返回一个Promise值。

co为什么能自动执行Generator函数?
其实就是递归的去调用Genertor函数返回值的next方法,让函数内部指针下移。

function run(gen){
  let context = this;

  return new Promise((resolve, reject) => {
    if (typeof gen === 'function') gen = gen.call(context);
    if (!gen || typeof gen.next !== 'function') return resolve(gen);

    onFulFilled();
    function onFulFilled(res) {
      var ret;
      try {
        ret = gen.next(res);
      } catch(err) {
        return reject(err);
      }
      next(ret);
    }

    function next(data) {
      if(data.done) resolve(data.value);

      let value = toPromise.call(context, data.value);
      if(value && isPromise(value)) {
        return value.then(onFulFilled, onRejected);
      }

      return function onRejected() {
        reject(new TypeError('Error ', data.value));
      }
    }
  })
}

相关文章

网友评论

      本文标题:实现一个简单的co函数

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