Вот так примерно выглядит ваш ответ на коллбэках. Примитивный вариант, без обработок ошибок. Фактически это своя миниреализация Promise.all
// имитация реквеста
function getDetailedHistory(itemId, allHomeEvent, done) {
setTimeout(300, () => done('im getDetailedHistory'));
}
// имитация реквеста
function getDetailedHistoryReverse(itemId, allHomeEvent, done) {
setTimeout(400, () => done('im getDetailedHistoryReverse'));
}
function getHistory(allHomeEvent, callback) {
// вместо запуска сначала соберем все запросы в массив функций.
const requests = [];
for (const event of allHomeEvent) {
let itemId = event.id
if (event.home.name === "Women") {
// записываем в массив функцию, замыкающую наш реквест
requests.push(done => getDetailedHistory(itemId, allHomeEvent, done));
}
if (event.away.name === "Women") {
requests.push(done => getDetailedHistoryReverse(itemId, allHomeEvent, done));
}
}
// запомнить число реквестов, чтобы понять когда все закончились, они же асинхронны.
let counter = requests.length;
// при окончании каждого реквеста, уменьшаем счетчик и смотрим уже конец или еще нет
const requestDone = () => {
counter -= 1;
if (counter <= 0) {
// реквесты кончились, пора дергнуть главный коллбэк
callback();
}
}
// а теперь пора выполнить весь массив
requests.forEach(request => request(requestDone));
}
getHistory(allHomeEvent, () => console.log('all done!'));
Подумайте как вынести выполнялку всех запросов в отдельную функцию, для переиспользования в дальнейшем.
Чтобы было так
const requests = getHistory(allHomeEvent);
doneAll(requests, () => console.log('all done!'));