依赖es6关键字: yield
- yield: 关键字用来暂停和继续一个生成器函数。
- yield 关键字使生成器函数暂停执行,并返回跟在它后面的表达式的当前值。与return类似,但是可以使用next方法让生成器函数继续执行函数yield后面内容,直到遇到yield暂停或return返回或函数执行结束。
async:包装成函数并且自执行
async function test (){} => myAsync( function test()={})
简单版本
function myAsync(generatorFunc){
return function (){
const gen = generatorFunc.apply(this,argument);
funciton step(key,value){
const { value ,done } = gen[key]();
if(done){
return value
}else{
step('next',value)
}
}
step('next')
}
}
完善版本
function myAsync(generatorFunc){
return function (){
const gen = generatorFunc.apply(this,argument);
return new Promise((resolve,reject)=>{
funciton step(key,value){
const { value ,done } = gen[key]();
if(done){
return resolve(value)
}else{
return Promise.resolve(value).then((value)=>step('next',value)).catch((err)=>step('throw',err))
}
}
step('next')
})
}
}