Gibt es idiomatische Möglichkeiten, in JavaScript "if (c1 || c2)" auszudrücken, wenn eine der Bedingungen ein Versprechen ist und die andere nicht?

Wenn ich die nächsten Schritte in meinem Algorithmus nur durchführe, wenn verschiedene Bedingungen erfüllt sind, drücke ich das folgendermaßen aus:

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

Wenn ich die nächsten Schritte nur anhand der Erfüllung eines Versprechens durchführe, kann ich es so ausdrücken:

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

Wie kann ich in idiomatischem JavaScript ausdrücken, wenn Bedingungsc1 ist nur ein regulärer alter synchroner Ausdruck, aber Bedingungac2 kommt asynchron über ein Versprechen?

Nehmen Sie an, dass native ES6-Versprechen und nicht-trivialer Code ausgeführt werden, wenn die Bedingungen erfüllt sind.

Zum Beispiel scheint dieser "offensichtliche" Weg hässlich:

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

Ich könnte den wiederholten Code in eine Funktion einfügen, die so oder so aufgerufen wird, was weniger hässlich ist, aber ich habe das Gefühl, dass mir etwas Idiomatischeres fehlt, das andere JavaScript-Programmierer möglicherweise verwenden.

Ich sollte auch diese Bemerkung hinzufügen: Da es in meinem Fall ein logisches oder gibt, sollte es einen Kurzschluss geben, damit es nicht die langsame verzögerte Prüfung stört, wenn die einfache Prüfung bereits @ isfalse.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage