我正在练习使用 Adaface 进行面试评估 (https://www.adaface.com/assessment-test/javascript-online-test)。
问题是这段代码的输出是什么:
function after5s(x) {
return new Promise(res => {
setTimeout(() => {
res(x);
}, 5000);
});
}
async function mult(input) {
const f = await after5s(3);
const g = await after5s(4);
return input * f * g;
}
mult(2).then(value => {
console.log(value);
});
async function second_mult(input) {
const f = after5s(3);
const g = after5s(4);
return input * await f * await g;
}
second_mult(2).then(value => {
console.log(value);
});
我认为这个问题的答案是等待10秒并输出24,然后等待5秒再输出24,但他们说正确的答案是:5秒后24,再过5秒,另一个24
我认为这个问题的答案是等待10秒并输出24,然后等待5秒再输出24
他们希望您注意的微妙部分是,并未等待“顶级”操作。 所以你是对的,这需要 10 秒:
mult(2).then(value => {
console.log(value);
});
你是对的,这需要 5 秒:
second_mult(2).then(value => {
console.log(value);
});
但是,它们都被“立即”调用并且都开始等待。 因此,5 秒后,后一个打印其输出,然后在另一个
5 秒(总共 10 秒)后,前一个打印其输出。