我有一個簡單的服務方法,收集幾個.get()
,我在「打印」部分有一些麻煩,因爲那時我只有一部分結果。如何鏈接方法才能在最後得到結果?
我在做什麼是:
var service = function() {
var players = []; // will hold 100 objects
var getMembers = function(id) {
$.get(url, function(data) {
for(i=0; i<data.length; i++) {
var p = data[i];
// get more info for this member
getMemberDetails(p.member_id);
// put the current data into the players
players.push(p);
}
});
calculateAndPrint();
};
var getMemberDetails = function(id) {
$.get(url, function(data) {
var result = $.grep(players, function(e){ return e.member_id == id; });
if (result.length == 0) { /* not found */ }
else if (result.length == 1) {
// push new data to player object
result[0].details = data;
}
});
};
var calculateAndPrint = function() {
for(i=0; i<players.length; i++) {
var p = players[i];
console.log(p);
}
};
})();
,這是不行的,因爲當我到達calculateAndPrint
,該details
甚至沒有設計尚未...
所以我嘗試$.Deferred()
和我遇到的唯一問題是,如果我推遲getMemberDetails
方法,該呼叫已包含一個deffer呼叫(.get()
),我回到同一問題...
什麼是o全部打完100個電話後,都會運行calculateAndPrint
?
這似乎很容易,但我只是空白:/
您可以遞增計數器,當它達到100時,在'getMemberDetails'回調中執行該函數 – Hacketo
您確定要爲此數據發出100 + 1個http請求嗎?難道你不能批量所有的100個請求,以獲得詳細信息到一個電話? –
你在哪裏使用ID以及如何調用'getMembers()'? – itzmukeshy7