我已经创建了一个这样的界面:
interface channels {
name: string;
}
我还有两个变量:
channelCollection: AngularFirestoreCollection<channels>;
channels: Observable<channels[]>;
我从Firebase接收数据,并将其存储在通道中。
然后,我必须遍历我的Observable<channels[]>
,并且我想记录每个项目的键name
的值。我尝试了以下方法:
this.channels = this.channelCollection.valueChanges();
this.channels.forEach(item => {
const channelname = item.name;
console.log('test', channelname);
});
不幸的是,它始终是不确定的。
答案 0 :(得分:2)
显然,this.channelCollection.valueChanges()方法返回一个Observable。这意味着该方法是异步的,因此您必须订阅它并在适当的回调中进行操作。
this.channelCollection.valueChanges().subscribe(channels => {
channels.forEach(item => {
const channelname = item.name;
console.log('test', channelname);
});
})
答案 1 :(得分:0)
点击是执行副作用的合适rxjs运算符。试试这个:
import { tap } from 'rxjs/operators';
this.channels = this.channelCollection.valueChanges().pipe(
tap(channels => {
channels.forEach(item => {
console.log('test', item.name);
}
)
).subscribe();