Pierwsza pętla wykonuje się przed startem pozostałych.
Nic w tym dziwnego. JS jest z założenia asynchroniczny - Twoja pierwsza pętla wywołuje się X razy, przygotowuje zapytania SQL, a wewnętrzne funkcje wykonają się, gdy te zapytania zwrócą wyniki..
(BTW, dwa wewnętrzne zapytania pewnie można by połączyć w jedno z JOINem. Ogólnie podział na normalne funkcje by się przydał...)