有没有使用过 async/await,他们的原理是什么
Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 526
Author 回答者: shfshanyue
原理: 一个 Generator 与一个自动执行器
Author 回答者: haotie1990
只支持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;
}