Existem maneiras idiomáticas de expressar "se (c1 || c2)" no JavaScript quando uma das condições é uma promessa e a outra não?

Quando eu apenas executo as próximas etapas no meu algoritmo se várias condições forem atendidas, eu o expresso da seguinte maneira:

if (sc1 || sc2) {
  do();
  various();
  things();
}

Quando apenas realizo os próximos passos com base no cumprimento de uma promessa, posso expressá-lo assim:

asyncCheck().then(ac1 => {
  if (ac1) {
    do();
    various();
    things();
  }
}

Como posso expressar em JavaScript idiomático quando a condiçãosc1 é apenas uma expressão síncrona antiga regular, mas condiçãoac2 vem assincronamente através de uma promessa?

Suponha promessas nativas do ES6 e código não trivial que será executado se as condições forem atendidas.

Por exemplo, esse caminho "óbvio" parece feio:

if (sc1) {
  do();
  various();
  things();
} else {
  asyncCheck().then(ac2 => {
    if (ac2) {
      do();
      various();
      things();
    }
  }
}

Eu poderia colocar o código repetido em uma função chamada de qualquer maneira, o que é menos feio, mas eu sinto que poderia estar perdendo algo mais idiomático que outros programadores de JavaScript podem estar usando.

Devo acrescentar também esta observação: Como no meu caso, existe um circuito lógico ou, deve haver um curto-circuito, para que não se incomode com a verificação lenta adiada se a verificação simples já estiverfalse.

questionAnswers(3)

yourAnswerToTheQuestion