Generator函数自动执行器

模仿async,用Generator函数实现

     async function fn(args) {
    // ...
    }

    // 等同于

    function fn(args) {
      return spawn(function* () {
        // ...
      });
    }

实现spawn函数,async函数会返回一个Promise对象

  function spawn (genF) {
    return new Promise(function (resolve, reject) {
        const gen = genF();
        function step (nextF) {
            let next;
            try {
                next = nextF();
            } catch (e) {
                return reject(e);
            }
            if (next.done) {
                return resolve(next.value);
            }
            Promise.resolve(next.value).then(function (v) {
                step(function () { return gen.next(v); });
            }, function (e) {
                step(function () { return gen.throw(e); });
            });
        }
        step(function () { return gen.next(undefined); });
    });
  }
posted @ 2021-07-14 11:28  clarenceez  阅读(90)  评论(0)    收藏  举报