# async实现
使用generator实现,实际是一个自执行的generator
function spawn(genF) {
// 始终返回Promise对象
return new Promise((resolve, reject) => {
const gen = genF();
function step(nextF) {
let next;
try {
next = nextF();
} catch (error) {
return reject(error);
}
if (next.done) {
// 最后一次执行,返回执行结果
return resolve(next.value);
}
Promise.resolve(next.value).then((v) => {
step(function() { return gen.next(v); })
},() => {
step(function(){ return gen.throw(e); })
});
}
step(function() {
// 首次执行 执行第一个await语句
return gen.next();
});
});
}
function getUser(name) {
console.log('beofr')
return spawn(function* () {
yield new Promise((resolve, reject) => {
setTimeout(() => {
resolve(name);
}, 1000);
});
yield 1;
return 'a';
});
}