co 模块记录理解

83 阅读1分钟
const Thunk = function (fn) {
  return function (...args) {
    return function (callback) {
      return fn.call(this, ...args, callback);
    }
  };
};


function run(fn) {
  var gen = fn();

  function next(err, data) {
    var result = gen.next(data);
    if (result.done) return;
    result.value(next);
  }
  next();
}

function f(a, cb) {
  cb(null, a);
}

const ft = Thunk(f);


co(function* () {
  let res1 = yield Promise.resolve(1);
  console.log(res1, 'res1')
  let res2 = yield [1, 2, 3, 2];
  console.log(res2, 'res2')
  let res3 = yield Promise.resolve(3);
  console.log(res3, 'res3')
  let res4 = yield ft(Promise.resolve(666));
  console.log(res4, 'res4')

  let res5 = yield Promise.resolve(555);
  console.log(res5, 'res5')
})

console.log('end')

co源码地址