async await 语法实现

原理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());
复制代码
相关文章
相关标签/搜索