2011-07-11 10 views
6

Próbuję zaimplementować następujący scenariusz, używając JQuery odroczonego, bez powodzenia.jQuery opóźnione - czy potrzebuję rur lub łańcuchów, aby osiągnąć ten wzór?

Co części odroczonej api byłoby użyć i jak byś struktury połączeń do osiągnięcia następujących celów:

1-te ajax Calla do serviceA pobrać listę identyfikatorów

czekać aż to wywołanie zwraca

następnie n ajax wzywa do serviceB,

czekać aż powrócą wszystkie połączenia serviceB każde wywołanie przy użyciu przy użyciu identyfikatora z listy zwróconej przez Calla

następnie ostateczne wezwanie ajax do serviceC

Odpowiedz

12

Można zrobić tak (mniej lub bardziej Pseudokod):

(function() { 
    // new scope 
    var data = []; // the ids coming back from serviceA 

    var deferredA = callToServiceA(data); // has to add the ids to data 

    deferredA.done(function() { // if callToServiceA successful... 
     var deferredBs = []; 

     for i in data { 
      deferredBs.push(callToServiceB(...)); 
     } 

     $.when.apply($, deferredBs).then(callToServiceC); 
    }); 

}()); 

Funkcja callToServiceX powinien zwrócić przedmiot obietnica zwrócony przez $.ajax.

Może istnieć "czystsze" rozwiązanie niż mające data we wspólnym zasięgu, z resolve, ale ustawienie byłoby nieco trudniejsze (i niekoniecznie bardziej czytelne).

+1

Dzięki temu zadziałało. Oto jsFiddle, który implementuje projekt: http://jsfiddle.net/zdam/kWP36/ – zadam

+0

@zadam: Ładny przykład :) Cieszę się, że zadziałało! –

Powiązane problemy