Но в один момент мы получили результат и хотим прекратить все это безобразие и вывести результат в основной функции
function main () {
const state = {
hasResult: false,
res: null
}
const recFoo = p => {
if(state.hasResult) return; // или так: if(state.res !== null) return;
// ...
// Как только понимаем, что есть результат,
// то пишем его в state.res и меняем флаг state.hasResult на true
// ...
}
recFoo();
return state.res;
}