高级前端
js
【Q513】有没有使用过 async/await,他们的原理是什么

有没有使用过 async/await,他们的原理是什么

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 526 (opens in a new tab)

Author 回答者: shfshanyue (opens in a new tab)

原理: 一个 Generator 与一个自动执行器

Author 回答者: haotie1990 (opens in a new tab)

只支持yield表达式后面跟着thunk函数

function runGenPromise(gen) {
  let _resolve = null;
  let _reject = null;
  let isReturnPromise = arguments.length === 1;
  let callback = !isReturnPromise
    ? arguments[1]
    : new Promise((resolve, reject) => {
        _resolve = resolve;
        _reject = reject;
      });
 
  let g = gen();
  const next = function (err, ...args) {
    if (err) {
      isReturnPromise ? _reject(err) : callback(err);
    }
    let result = g.next(...args);
    if (!result.done) {
      result.value(next);
    } else {
      isReturnPromise ? _resolve(result.value) : callback(null, result.value);
    }
  };
  next();
  return callback;
}