yield 关键字用来暂停和恢复一个生成器函数((function* 或遗留的生成器函数)。
/**
* 在控制台每隔1秒,依次输出
* 0,1,2,3,4
*/
//延迟1秒返回n
function delay(n){
return new Promise(resolve => {
setTimeout(() => {
resolve(n)
}, 1000);
})
}
//方案一: async + await + promise
/* (async function(){
for(let i = 0; i<5; i++){
await delay(i).then(n=>{
(n)
})
}
})() */
//这种写法也可以噢!
/* (async function(){
for(let i = 0; i<5; i++){
const n = await delay(i)
(n)
}
})() */
//方案二:生成器函数(function*) + yield +promise
function* gen(){
for(i=0;i<5;i++){
const n = yield delay(i)
(n)
}
}
//执行函数
function co(gen){
const g = gen()
next()
function next(data){
//递归调用g的next,直到执行结束
const {value,done} = (data)
if(done) return
(data=>{
next(data)
})
}
}
//执行
co(gen)