function run (taskDef) {
let task = taskDef()
function step() {
let result = task.next();
if (result.done) return
result.value && result.value.then( res => {
console.log('this is then')
step()
})
}
step()
}
function* foo() {
let arr = [4,3,2,1]
for (let i of arr) {
yield fetch(i)
}
}
function fetch(i) {
return new Promise( resolve => {
setTimeout( () => {
console.log(i)
resolve()
}, 1000*i)
})
}
run(foo)
总结
简单粗暴直接贴代码哈哈,有什么不懂的在评论区留言,我再进行完善解答。