code: function wrap(genFn) {
    // 包装 generator 函数
    const fn = genFnToPromise(genFn);
    // 保留函数名和参数信息
    let info;
    if (genFn.length > 0) {
      info = genFn.toString().match(/\*((.*?)\(\s*([^)]+?)\s*\))/);
    } else {
      info = genFn.toString().match(/\*((.*?)\(\s*(\s*)\s*\))/);
    }
    const sign = info && info[1] ? info[1] : '()';
    const code =
  `(function ${ sign } {
    return fn.apply(this, arguments);
  })`;
    const ret = eval(code);
    ret.__generatorFunction__ = genFn;
    ret.__sourceLocation__ = getSourceLocation(3);
    return ret;
  }
docs: coroutine 包装函数
  
  @param {Function} genFn
  @return {Function}