Получить значение из 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 проверяем, не выпадает ли праздник на этот день

Ответы (0 шт):