Я пытаюсь обновлять сообщения в моем приложении ionic 4 в режиме реального времени, используя базу данных в реальном времени angularfire2 и firebase. Код выглядит как ниже
При запуске выдает исключение
Ошибка: InvalidPipeArgument: '' для канала 'AsyncPipe'
если я удаляю слово async, то оно появляется нормально, но когда я отправляю новое сообщение из другого экземпляра, тогда все данные повторяются.
HTML
<ion-list lines="full" style="background:transparent">
<ion-item style="padding-top:10px;" *ngFor="let msg of messages | async">
<ion-row style="width:100%;">
<ion-col size="3">
<ion-row>
<ion-col class="sg-reg-text">{{formatName(msg.name)}}</ion-col>
</ion-row>
<ion-row>
<ion-col style="padding:0;padding-left:8px" class="sg-tiny-text"><ion-icon name="time" color="light"></ion-icon> now</ion-col>
</ion-row>
</ion-col>
<ion-col style="border-bottom: 1px solid #7e7c8d;padding-bottom: 10px">
<ion-row>
<ion-col class="sg-reg-text">{{msg.message}}</ion-col>
</ion-row>
</ion-col>
</ion-row>
</ion-item>
</ion-list>
ц
messages:Post[]
refresh(){
this.messages = []
this.sgSvc.getMessages().subscribe(
(rsp:any) => {
for(let data of rsp){
console.log("hehe:" + JSON.stringify(data))
this.messages.push(new Post(data._name, data._message, data._uid))
}
}
)
}
ngOnInit() {
this.refresh()
}
svc.ts
private msgList: AngularFireList<Post>
GetMessages () {
this.msgList = this.db.list<Post>('posts')
return this.msgList.snapshotChanges().pipe(
map(changes =>
changes.map(c => ({ key: c.payload.key, ...c.payload.val() }))
)
);
}