Why doesn't the generator wait for the asynchronous prm promise to complete before moving on to the next yield?
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) {}
returns
undefined
1
2
3
Because a generator - on its own - doesn't wait for anything. It just emits what you were yield
ing from the next()
call. You could of course have your loop wait when before calling next
again when it gets a promise.
What you are thinking of is async
/await
. You want to write
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();