Использование SC.get () внутри цикла (Javascript / Jquery) - PullRequest
0 голосов
/ 16 марта 2012

Я храню идентификаторы дорожек в базе данных, которые используются в качестве списков воспроизведения.

Данные идентификатора дорожки извлекаются с помощью jQuery $ .get () и возвращаются в массив JSON.

Затем jQuery $ .each () зацикливает SC.get ('/ track /'), которому передается соответствующий идентификатор дорожки.

$.each(pl_array.track, function(i) {
    var pl_track_id = '/tracks/' + pl_array.track[i].id;
    SC.get(pl_track_id,function (tracks) {
        //looped code here
    });
});

Проблема в том, что вызов SC.get () является асинхронным и приводит к случайному упорядочению дорожек. В jQuery $ .get () есть возможность отключить асинхронный и синхронный запуск. Есть ли способ сделать что-то подобное с помощью функции SC.get () или есть другая опция?

1 Ответ

1 голос
/ 16 марта 2012

Не делайте этого.
SJAX замораживает браузер и очень раздражает.

Если вы действительно хотите синхронную обработку, используйте рекурсию вместо цикла:

var items = ...;
function processItem() {
    var item = items.unshift();
    SC.get(item.id. function() { 
        ...
        if (items.length)
            processItem();
    });
}

Однако было бы намного быстрее отправлять все запросы одновременно (так, как вы это делаете сейчас), а затем сортировать результаты после того, как они все поступят.

...