等待后不承诺

时间:2019-01-09 07:46:07

标签: javascript promise async-await

问题

为什么在下面的代码中第二个foo()没有被调用?

function foo() {
  console.log("--- entering foo ---")
  return new Promise(() => {
    setTimeout(() => {
      console.log("--- resolved ---")
    }, 2000)
  })
}

async function bar() {
  await foo()
  foo() // not called
}

bar()

为澄清我已经做过的一些试验:

工作

foo()
foo()
foo()
await foo()

不起作用

await foo()
foo() // not called
await foo()
await foo() // not called

1 个答案:

答案 0 :(得分:6)

您在foo中的承诺未得到解决,因此await foo()陷入困境。在foo中兑现您的诺言:

function foo() {
  console.log("--- entering foo ---")
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log("--- resolved ---")
      resolve()
    }, 2000)
  })
}

async function bar() {
  await foo()
  foo()
}

bar();