原理promise
async本质上是将串行写法的promise转换为并行(同步)写法,经过自动执行器,将其转换为串行便可实现相同效果
将await替换为yield,转换为generate函数,而后建立其迭代器,经过next,使得函数进入下一步yield
定义自动执行器:判断next返回的done属性,为true时,结束递归
不为true时,递归执行执行器根据返回value的类型使用promise.then(... next(res)) 或者 next(value),最终实现并行 转 串行
复制代码
实现markdown
async function asyncDetail(){
// do something...
console.log('aaa');
await a();
// do something...
console.log('bbb');
await b();
// do something...
console.log('ccc');
await c();
}
步骤一:
function* asyncDetailGenerate(){
// do something...
console.log('aaa');
const a = yield test();
console.log('a');
// do something...
console.log('bbb');
const b = yield test();
console.log('b');
const d = yield 'dddd';
console.log(d);
// do something...
console.log('ccc');
const c = yield test();
console.log('c');
}
步骤二:
const runner = asyncDetailGenerate();
步骤三:定制执行器
const autoRunner = (runner,{value,done})=>{
if(done){
return value;
}else{
if(value instanceof Promise){
value.then(res=>{
const nextResult = runner.next(res);
autoRunner(runner,nextResult);
})
}else{
const nextResult = runner.next(value);
autoRunner(runner,nextResult);
}
}
}
步骤四:autoRunner(runner,runner.next());
复制代码