Взгляните на этот образец, это просто фантастика!

async function b () {
  return new Promise(res => setTimeout(res.bind(null, 0), 1500))
}
async function a () {
  if (await b()) {
    console.log(1);
  } else {
    console.log(false);
  }
}
a(); // false

Попробуйте изменить 0 на другое истинное значение, и вы увидите, что код внутри a работает именно так, как он написан, и так, как вы могли ожидать.

Вы можете попробовать это здесь: https://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=true&presets=es2015%2Creact%2Cstage-0&targets=&browsers=&builtIns=false&code=async%20function%20b%20() %20%7B%0A%20%20return%20new%20Promise(res%20%3D%3E%20setTimeout(res.bind(null%2C%20false)%2C%201500))%0A%7D%0A%0Aasync% 20function%20a%20()%20%7B%0A%20%20if%20(await%20b())%20%7B%0A%20%20%20%20console.log(1)%3B%0A% 20%20%7D%20else%20%7B%0A%20%20%20%20console.log(false)%3B%0A%20%20%7D%0A%7D%0A%0Aa()&experimental=false&loose= false&spec=false

Фантастика!