2 回答

TA贡献1798条经验 获得超3个赞
f1是异步的(等待仅在该异步上下文中发生)。因此,将执行f1(),并且由于它是异步的,因此该let x = 3;行无需等待即可立即执行。
如果您还await调用f1(),它应该可以完成您的期望。但是,为了使用await,您必须将该代码包装在另一个异步函数中,然后执行该函数。
演示(不等待):
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function f1() {
var x = await resolveAfter2Seconds(10);
console.log(x);
}
f1();
let x = 3;
console.log(x);
工作版本(需要额外等待):
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function f1() {
var x = await resolveAfter2Seconds(10);
console.log(x);
}
async function f2() {
await f1();
let x = 3;
console.log(x);
};
f2();

TA贡献2037条经验 获得超6个赞
更简单
(async function() {
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function f1() {
var x = await resolveAfter2Seconds(10);
console.log(x);
}
await f1();
let x = 3;
console.log(x);
})();
添加回答
举报