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);
})();
添加回答
舉報