可观察阵列映射不起作用 - 有关更改的重复数据

时间:2017-05-28 13:54:41

标签: arrays angular ionic-framework rxjs observable

我在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);
}

0 个答案:

没有答案