为什么这个异步js函数不打印done

问题描述 投票:0回答:1

考虑以下脚本:

async function fn() {
    await new Promise(() => { console.log("promise"); });
    console.log("done");
}
fn();

输出是

promise

如果我不等待承诺,那么结果就会不同。

async function fn() {
    new Promise(() => { console.log("promise"); });
    console.log("done");
}
fn();

现在的输出更加符合预期。

promise
done

我假设这是由于某种语言的错误使用造成的,但我想知道这种差异的原因。

javascript asynchronous
1个回答
0
投票

因为您没有调用

resolve
函数,而当
new Promise
创建的 Promise 应该被解析时,您应该调用该函数:

async function fn() {
    await new Promise(() => { console.log("promise"); });
    console.log("done");
}
fn();

应该是

async function fn() {
    await new Promise((resolve) => { console.log("promise"); resolve(); });
    console.log("done");
}
fn();

如果你希望它能完成。

© www.soinside.com 2019 - 2024. All rights reserved.