所以我試圖通過一個Firebase數據庫來查找符合條件的數據庫中的條目。因此,我使用jQuery的延遲對象來處理數據庫調用。jQuery Deferred僅返回循環中的最後一個值
一旦我從第一個數據庫得到返回值,我想從第二個數據庫獲取第一個數據庫中每個值的用戶信息。然後將結果添加到一個JSON數組
所以它的:
<search for value, find one>
<<<search other db for oher info>>>
<continue search for outer value>
但是,這只是一個返回值 - 儘管一切運行良好(和控制檯日誌的所有信息是正確的)。
下面的代碼:
function find(searchLocation, profileID) {
var requestUserData = {
data: []
};
var def = $.Deferred();
//This will be executed as long as there are elements in the database that match the criteria and that haven't been loaded yet (so it's a simple loop)
Ref.orderByChild("location").equalTo(searchLocation).on("child_added", function(snapshot) {
def.ressolve(snapshot.val().ID);
});
return def.promise();
};
我希望你們有做什麼或者我怎麼能解決這個問題的任何想法。提前致謝!
編輯:經過進一步測試,我發現這個問題已經存在於外循環 - 所以只有第一個值被返回。我認爲這與resolve()方法的存在有關,但我沒有發現如何改變這種行爲的可能性。
循環中的'notify'和完成時的'resolve' – Johan 2014-12-03 21:40:25
這導致resolve()beeing在查詢的第一次運行結束前執行,因此我得到一個空對象作爲返回值 – chrissik 2014-12-03 21:52:07
詳細說明:找出總數結果集的長度。通知()'完成每個項目。當你達到集合的總長度時,你需要解析延遲對象。 – Johan 2014-12-03 21:54:48