2013-01-05 30 views
5

Tôi có cuộc gọi ajax với cuộc gọi lại. Tôi muốn gọi một phương thức JUST sau khi cuộc gọi lại kết thúc..Tôi đã sử dụng API lời hứa từ jQuery nhưng như bạn có thể thấy bên dưới phương thức thứ hai được gọi trước khi phương thức đầu tiên đã hoàn thành.Lời hứa jQuery với getJSON và gọi lại

Bất kỳ ý tưởng nào?

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 } 
    }(); 

kết quả để an ủi:

second:1357393615115 
first: 1357393615246 

Trả lời

9

Thay vì cung cấp một chức năng gọi lại để .then(), bạn đang đi qua trong đầu ra của console.log("second:" + new Date().getTime()) (đó là lý do second được in ngay lập tức).

Thực hiện một chức năng vô danh mà kết thúc tốt đẹp mã mà bạn muốn gọi (giống như bạn đã làm trong .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/