发电机未评估承诺 [英] Generator not evaluating promises

查看:71
本文介绍了发电机未评估承诺的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么发电机在进入下一个收益率之前不等待异步prm承诺完成?

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) {}

返回

undefined
1
2
3


推荐答案

因为生成器(本身)不会等待任何东西。它只是发出 next()调用的收益的信息。您当然可以等待自己的循环,然后在得到保证时再次调用 next

Because a generator - on its own - doesn't wait for anything. It just emits what you were yielding from the next() call. You could of course have your loop wait when before calling next again when it gets a promise.

您是什么想到的是 async / await 。您要编写

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

这篇关于发电机未评估承诺的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆