2013-01-05 16 views
5

Mam wywołanie ajax z wywołania zwrotnego. Chcę wywołać inną metodę JUST po zakończeniu wywołania. Użyłem interfejsu API obietnicy z jQuery, ale jak widać poniżej, druga metoda jest wywoływana przed ukończeniem pierwszej.obietnica jQuery z getJSON i wywołanie zwrotne

Wszelkie pomysły?

my.data = function() { 
    var loadFlights = function (callback) { 
     //$.getJSON("/api/Acceptance/", function (data) { 
     // callback(data); 
     //}); 
     $.getJSON("/api/Acceptance").success(function (data) { 
      console.log("first: " + new Date().getTime()); 
      callback(data); 
     }) 
     .then(console.log("second:" + new Date().getTime())); 
    }; 

    return { load: loadFlights } 
    }(); 

wynik pocieszyć:

second:1357393615115 
first: 1357393615246 

Odpowiedz

9

Zamiast zapewnienie funkcji zwrotnej do .then(), jesteś przejazdem w wyjściu console.log("second:" + new Date().getTime()) (dlatego second zostanie wydrukowany natychmiast).

Złóż anonimową funkcję, która otacza kodu, który chcesz zadzwonić (tak jak to zrobiłeś w .success()):

$.getJSON("/echo/json").success(function(data) { 
    console.log("first: " + new Date().getTime()); 
}).then(function() { 
    console.log("second:" + new Date().getTime()) 
}); 

Demo: http://jsfiddle.net/Blender/fJb7h/

Powiązane problemy