发电机不评估承诺

时间:2017-05-20 08:55:43

标签: javascript es6-promise

为什么生成器不等待异步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

1 个答案:

答案 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();