如何使用angularFire防止重复结果

时间:2017-12-04 16:02:58

标签: angular typescript firebase ionic3 angularfire

我有这样的firebase db:

    "cardsList" : {
            "tok_1BVGrNCM8UWO9kaul5P0MoQa" : {
              "cardHolder" : "John",
              "expMonth" : 12,
              "expYear" : 2020,
              "number" : "42** **** **** **43",
              "pin" : 1234
            },
              "tok_7BTErNCM8UWO9kaul5P0MoQa" : {
              "cardHolder" : "Eliott",
              "expMonth" : 12,
              "expYear" : 2020,
              "number" : "44** **** **** **49",
              "pin" : 1234
            }
}

我使用以下方法获取数组中每张卡的结果:

this.firebaseProvider.list('patientList/'+this.profileMember.idPatient+'/cardsList')
    .subscribe(cards=> cards.forEach(card=> {
      console.log(card.number)
      this.cardsList.push({'number': card.number})
      }))

在我的html中,我用以下结果显示结果:

<div *ngFor="let card of cardsList">
{{card.number}}
</div>

问题是,每次更新数据库上的一个值时,我都会得到重复的结果(例如:carHolder已更新)

Ex: 在更新之前

42** **** **** **43
44** **** **** **49

更新后

42** **** **** **43
44** **** **** **49
42** **** **** **43

如何防止这种情况?

欢迎任何帮助。

亚历。

1 个答案:

答案 0 :(得分:1)

只需将observable转换为promise,就可以完全避免这种情况。

import 'rxjs/add/operator/toPromise';

this.firebaseProvider.list('patientList/'+this.profileMember.idPatient+'/cardsList').toPromise().then(cards=> cards.forEach(card=> {
    this.cardsList.push({'number': card.number})
}))