Обещание не вызвано после ожидания - PullRequest
0 голосов
/ 09 января 2019

Задача

Почему в следующем коде второй 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 голосов
/ 09 января 2019

Ваше обещание в 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();
...