Существуют ли идиоматические способы выражения «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
.