为什么生成器不等待异步prm承诺完成,然后再继续下一个收益?
function *verify() {
try {
let prm = new Promise((resolve,reject) => {
resolve("abc");
})
let k = yield prm
console.log(k)
yield 1;
console.log("1")
yield 2;
console.log("2")
yield 3;
console.log("3")
} catch (err) {
console.log("error")
}
}
var gen = verify()
while (!gen.next().done) {}
返回
undefined
1
2
3
答案 0 :(得分:1)
因为发电机 - 它自己 - 不会等待任何事情。它只会从yield
调用中发出您next()
的内容。当然,在获得承诺之前再次调用next
之前,你可以让你的循环等待。
您的想法是async
/ await
。你想写
async function verify() {
try {
let prm = new Promise((resolve,reject) => {
resolve("abc");
})
let k = await prm
console.log(k)
console.log("1")
console.log("2")
console.log("3")
} catch (err) {
console.log("error")
}
}
var prm = verify();