我遇到以下情况,但其行为并不符合我的预期:
async function sleep(milliseconds) {
await new Promise(resolve => { setTimeout(() => { resolve(); }, milliseconds)});
}
async function logMessage(message) {
await sleep(100);
console.log(message);
}
async function taskA() {
await sleep(2000);
await logMessage('In taskA');
}
async function taskB() {
await taskA().then(logMessage('In taskB'));
}
taskB();
当我调用taskB时,我希望taskA在进入then之前完成。我期望这个输出:
In taskA
In taskB
然而,实际发生的是 logMessage('In taskB') 被立即调用,而不是在 taskA 完成之后调用,所以输出是这样的:
In taskB
In taskA
我在这里误解了什么?
最佳答案
应该是 await taskA().then(()=>logMessage("In taskB"));
而不是 await taskA().then(logMessage('In taskB') );
async function sleep(milliseconds) {
await new Promise(resolve => {
setTimeout(() => {
resolve();
}, milliseconds);
});
}
async function logMessage(message) {
await sleep(100);
console.log(message);
}
async function taskA() {
await sleep(2000);
await logMessage("In taskA");
}
async function taskB() {
await taskA().then(()=>logMessage("In taskB"));
}
taskB();
关于JavaScript 使用 then() 立即等待异步方法执行 then(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49598181/