for(var i in obj){
(finctuin(i){
код, который должен выполниться первее кода ниже
})(i);
// код, который должен выполниться после верхней функции, но он выполняется до неё..
}
И так надо в каждой итерации... А на деле получается, что сначала пройдут все итерации кода ниже, а потом все итерации кода выше.
Urukhayy: нет. если у тебя что-то асинхронное выполняется в цикле, то первым выполнится тот коллбек, который раньше вызовется после окончания асинхронного кода. более того, первая функция - не коллбек, а просто самовызываемая.
for (var el in obj) {
асинхронная_функция1(параметры, коллбек1);
асинхронная_функция2(параметры, коллбек2);
}
вот в таком сценарии коллбеки не будут выполняться по-очереди. 2-й может вызваться раньше первого, так как они выполняются при завершении асинхронной функции, чей порядок завершения неизвестен заранее.
for (var el in obj) {
асинхронная_функция1(параметры, function(параметры) {
синхронный_код;
асинхронная_функция2(параметры, коллбек2);
});
}
Вроде так. Или засунуть весь синхронный код во второй коллбек.
Хотя такую лапшу из колбеков городить плохо. Чтобы избежать кучи вложенных коллбеков, можно использовать when/then из jquery (или её аналоги).