JavaScript 使用 then() 立即等待异步方法执行 then()

标签 javascript async-await

我遇到以下情况,但其行为并不符合我的预期:

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/

相关文章:

javascript - 禁用 flex 换行间距

javascript - react native : selectable section list view gives error

c# - 如何从[TestMethod]调用异步?

c# - 何时使用 "async"而不是返回新的 Task.Run 任务?

javascript - 无限滚动网页

javascript - axios 获取参数数组

c# - 任务 FromResult 与 TaskCompletionSource SetResult

c# - 使用 Async 和 Await 进行异步编程

javascript - 如何在 Lodash _.times 函数中使用异步等待?

java - 使用 GWT 从 URL 下载数据