我在Ionic Firebase / GeoFire应用程序上有一个主屏幕,应该向附近的人展示。
该函数设置为返回附近的用户数组的observable,并且observable设置为映射数组值,因此如果某人更新其名称或更改其位置,为什么主屏幕会显示重复数据。它会将另一个成员与旧成员一起添加。
public outputUsersCloseToMe(userSettingDistance ? ): Observable < Array < iUserModel >> {
let availableUsers = < Array < iUserModel >> [];
this.firebaseInit().database().ref("users").child(this.profile().uid).child('profile').child('lastKnownLocation').once('value').then((snapshot) => {
const args = {
center: [snapshot.val().lat, snapshot.val().lng],
radius: parseInt(userSettingDistance, 10)
}; //kilometers
this.geoFire.query(args).on("key_entered", (key, location, distance) => {
this.firebaseInit().database().ref('users').child(key).child('profile').on('value', (usr) => {
if (usr.val() && usr.val().id != this.profile().uid) {
availableUsers.push({
id: usr.val().id,
birthday: usr.val().birthday,
gender: usr.val().gender,
distance: distance.toFixed(2),
location: location,
firstName: usr.val().firstName,
userAvatar: (!usr.val().avatarUrl ? "../assets/img/generic.png" : usr.val().avatarUrl),
});
}
});
});
});
return Observable.from([availableUsers]).map(val => val);
}