¿Hay formas idiomáticas de expresar "if (c1 || c2)" en JavaScript cuando una de las condiciones es una promesa y la otra no?

Cuando solo realizo los siguientes pasos en mi algoritmo si se cumplen varias condiciones, lo expreso de esta manera:

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

Cuando solo realizo los siguientes pasos basados en el cumplimiento de una promesa, puedo expresarlo así:

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

¿Cómo puedo expresar en JavaScript idiomático cuando condiciónsc1 es solo una expresión síncrona antigua pero regularac2 viene asincrónicamente a través de una promesa?

Suponga promesas de ES6 nativas y código no trivial que se ejecuta si se cumplen las condiciones.

Por ejemplo, esta forma "obvia" parece fea:

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

Podría poner el código repetido en una función que se llama de cualquier manera, lo que es menos feo, pero siento que podría estar perdiendo algo más idiomático que otros programadores de JavaScript podrían estar usando.

Debo agregar esta observación también: dado que en mi caso, hay un lógico o, debería cortocircuitar, por lo que no debería molestarse con la verificación diferida lenta si la verificación simple ya esfalse.

Respuestas a la pregunta(3)

Su respuesta a la pregunta