Использование SC.get() внутри цикла (Javascript/Jquery)

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

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

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

$.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() или есть другой вариант?


person jamesbat.es    schedule 16.03.2012    source источник


Ответы (1)


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

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

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

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

person SLaks    schedule 16.03.2012
comment
Однако это не проблема, на самом деле это не так уж и медленно. Так что я думаю, что проблема решена, спасибо большое :) - person jamesbat.es; 16.03.2012