Существуют ли идиоматические способы выражения «if (c1 || c2)» в JavaScript, когда одно из условий является обещанием, а другое - нет?

Когда я выполняю только следующие шаги в моем алгоритме, если выполняются различные условия, я выражаю это следующим образом:

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

Когда я выполняю только следующие шаги, основанные на выполнении обещания, я могу выразить это следующим образом:

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

Как я могу выразить в идиоматическом JavaScript, когда условиеsc1 это просто обычное старое синхронное выражение, но условиеac2 приходит асинхронно через обещание?

Предположим, собственные обещания ES6 и нетривиальный код, который выполняется, если выполняются условия.

Например, этот «очевидный» способ кажется уродливым:

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

Я мог бы поместить повторяющийся код в функцию, которая вызывается в любом случае, что менее уродливо, но я чувствую, что могу упустить что-то более идиоматическое, чем другие программисты JavaScript могут использовать.

Я должен также добавить это наблюдение: так как в моем случае, есть логическое или, оно должно закорачиваться, чтобы не беспокоить медленная отложенная проверка, если простая проверка ужеfalse.

Ответы на вопрос(3)

Ваш ответ на вопрос