javascript JS -为什么代码在异步/等待承诺后不运行[重复]

ia2d9nvy  于 2023-01-24  发布在  Java
关注(0)|答案(2)|浏览(123)
    • 此问题在此处已有答案**:

Why does nodejs stop execution of while true loop inside async function(3个答案)
21小时前关门了。
我在TS操场上有一个示例代码代表了我的问题。在一个异步函数中,我在等待承诺后记录结果,但只有承诺内的代码运行,没有承诺外的日志。有人能解释一下这个问题吗?
下面是代码:

const asyncFnc = async () => {
    let result = false;
    await new Promise(resolve => {
        setTimeout(() => {
            // This log worked
            console.log('waited 5s');
            result = true;
        }, 5000);
    });
    // This log did not worked
    console.log(result);
}

asyncFnc();

结果是:

wwwo4jvm

wwwo4jvm1#

await使父函数休眠,直到右手侧的承诺确定(即,解决或拒绝)。
你的承诺从不解析或拒绝(也就是说,你不调用resolve,不使用第二个参数,也不抛出异常)。
因此父函数将永远休眠。
编写此语句的惯用方法是避免在更大的作用域中设置变量,而只是使用值进行解析。

const asyncFnc = async () => {
    const result = await new Promise(resolve => {
        setTimeout(() => {
            console.log('waited 5s');
            resolve(true);
        }, 5000);
    });
    console.log(result);
}

asyncFnc();
thtygnil

thtygnil2#

您需要在超时时调用resolve()

相关问题