Решал аналогичную проблему.
Есть вариант.
Проблема в том, что запросы ассинхронные и мы не можем предугадать, какие из них выполнятся медленней, а какие быстрее.
Вариант для решения данной проблемы - создать пару эшнов, BEGIN_FETCHING и END_FETCHING.
Добавить в стор объект, который бы аккумулировал процесс загрузки, по умолчанию он равен 0.
В начале запроса делаем
yield put({
type: BEGIN_FETCHING
})
а в конце
yield put({
type: END_FETCHING
})
в редьюссере прописываем, что BEGIN_FETCHING увеличиваает значение, на 1, а END_FETCHING уменьшает
и когда у нас значение объекта стало 0, то убираем прелоадер.