Получить значение из Promise и использовать в другой части функции
Помогите, пожалуйста, разобраться. Я прочитал с десяток вроде бы похожих вопросов тут, но не понимаю, как это применить в своём случае. Есть функция, которая возвращает ближайший рабочий день по такому алгоритму:
function getNextWorkDay (day) { //принимаем день
let nextDay = addDays(day, 1) //получаем следующий день, который будем проверять
if (!isDayOff(nextDay)) { //если этот день не СБ или ВС, дальше проверяем праздничный ли он
//(*1)
isHoliday(nextDay).then(answer => { // isHoliday() возвращает 0 или 1, где 1 - праздничный день
if (answer === '1') { //если день праздничный -> вызываем функцию заново, она выполнится уже со днём+1
getNextWorkDay(nextDay)
}
else { // если пришло что угодно, кроме "1" (в т. ч. сервис оказался не доступен) считаем день рабочим,
// выходим из этой функции, попадаем к последнему (*2) return, который вернёт текущий день (nextDay)
return
}
})
}
else { //если день СБ или ВС -> вызываем функцию заново
getNextWorkDay(nextDay)
}
//если ни в одной из проверок, функция getNextWorkDay не вызвалась заново, то считаем день рабочим и возвращаем его
//(*2)
return nextDay
}
Но функция завершается (*2) до получения ответа из блока (*1) isHoliday(nextDay).then()". Как заставить последний return (*2) дождаться завершения проверки блока (*1)?
Как в данной логике должна выглядеть реализация? Подход в том, что если день является СБ или ВС, то проверка через сторонний сервис (isHoliday(nextDay)) не производится.
И верно ли то, что раз самая глубокая по вложенности функция (f4) возвращает promise, то все функции вверх по цепочке должны возвращать promise? Иначе код в (f1) выполнится не дождавшись ответа.
f1(){f2()} //получаем массив дней и выводим его на экране
↑
f2(){f3()} //в цикле заполняем массив ближайших рабочих дней
↑
f3(){f4()} //находим следующий не выходной день после переданного
↑
f4() //через fetch проверяем, не выпадает ли праздник на этот день