实际开发中,async await用的很多,今天来实现一下async语法糖的run函数
function p1() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('p1')
}, 1000)
})
}
function p2() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('p2')
}, 1000)
})
}
function p3() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('p3')
}, 1000)
})
}
function* get() {
let p11 = yield p1()
let p22 = yield p2(p11)
let p33 = yield p3(p22)
console.log(p33, '最后的结果')
}
function run(fn) {
let g = fn()
function next(data) {
let res = g.next(data)
if (res.done) { // 判断done是否执行完
return res.value
}
res.value.then((data) => {
next(data)
})
}
next()
}
run(get)