構建帶有Ionic框架和Firebase的JS應用程序。如何處理修改同一變量的遞歸異步數據庫調用
我希望應用根據他們訪問的國家/地區向每個用戶建議一系列用戶進行討論。建議列表中首先介紹最常用國家/地區的用戶,而不是當前用戶。
我有兩個表中火力地堡:
"users" : {
"userA" : {
"countries" : [ {
"id" : 4,
"name" : "france"
}, {
"id" : 2,
"name" : "spain"
} ]
},
"userB" : {
"countries" : [ {
"id" : 4,
"name" : "france"
}, {
"id" : 2,
"name" : "russia"
} ]
},
"userC" : {
"countries" : [ {
"id" : 4,
"name" : "france"
}, {
"id" : 2,
"name" : "spain"
} ]
}
和索引表:
"country_user" : {
"france" : { "userA" : true, "userB" : true, "userC" : true },
"spain" : { "userA" : true, "userC" : true },
"russia" : { "userB" : true }
}
在前端我想$ scope.matches存儲用戶的排行榜中名列如上所述。
在服務器端,我實現以下邏輯:
- 檢索當前用戶已訪問過的國家的名單,並在表中返回一個承諾與這些國家
- 對於每一個國家獲取country_user列表對應於該國
- 創建一個「匹配」陣列,解析的2各自結果和更新「匹配」陣列
無極1的用戶:
function getUserCountryListPromise(_uid){
return firebase.database().ref('users/' + user.uid + '/countries/').once('value').then(function(snap){
var userCountryList = [];
if(snap.exists()){
snap.forEach(function(country){
userCountryList.push(country.val().name);
});
}
return userCountryList;
});
}
我開始實施2,但我堅持:
function getRegistrationsToCountries(_country){
return firebase.database().ref('/country_user/' + _country).once('value').then(function(snap){
if(snap.exists()){
snap.forEach(function(registeredUser){
});
}
如果用戶A的我想打電話給getRegistrationsToCountries兩次,只有當這兩個呼叫完成(但電話號碼是動態)我想解析它們以更新我想返回到前端的「匹配」列表。
有什麼建議嗎?
感謝
謝謝喬治您的答案!我試圖實現你的解決方案,但我有$ q(未定義)的引用錯誤,但我認爲我注入它正確:'.service('UserService',['$ q',function($ q){'am做錯了什麼? –