Prova a sostituire l'each di jQuery ed usare un classico for, per quanto possa sembrar strano l'each di jquery funziona un po' come una cosa asyncrona, potrebbe essere che il return non torni il risultato aspettato.
Potresti se no provare a combinare promise() all'each e vedere che succede.