Javascript 角度2观测值-动作时的空响应仍然显示阵列中的数据
我有一个函数,它从Firebase聚合一些用户数据,以构建一个“朋友请求”视图。页面加载时,将显示正确的请求数。当我点击一个“接受”按钮时,正确的连接请求会被更新,这会发出再次运行此功能的信号,因为用户已经订阅了它。唯一的问题是,一旦所有好友请求都被接受,最后一个剩余的用户将留在列表中,并且不会离开,即使他们已经被接受 下面是我用来获取请求的函数:Javascript 角度2观测值-动作时的空响应仍然显示阵列中的数据,javascript,angular,firebase,ionic2,angularfire2,Javascript,Angular,Firebase,Ionic2,Angularfire2,我有一个函数,它从Firebase聚合一些用户数据,以构建一个“朋友请求”视图。页面加载时,将显示正确的请求数。当我点击一个“接受”按钮时,正确的连接请求会被更新,这会发出再次运行此功能的信号,因为用户已经订阅了它。唯一的问题是,一旦所有好友请求都被接受,最后一个剩余的用户将留在列表中,并且不会离开,即使他们已经被接受 下面是我用来获取请求的函数: getConnectionRequests(userId) { return this._af.database .objec
getConnectionRequests(userId) {
return this._af.database
.object(`/social/user_connection_requests/${userId}`)
// Switch to the joined observable
.switchMap((connections) => {
// Delete the properties that will throw errors when requesting
// the convo keys
delete connections['$key'];
delete connections['$exists'];
// Get an array of keys from the object returned from Firebase
let connectionKeys = Object.keys(connections);
// Iterate through the connection keys and remove
// any that have already been accepted
connectionKeys = connectionKeys.filter(connectionKey => {
if(!connections[connectionKey].accepted) {
return connectionKey;
}
})
return Observable.combineLatest(
connectionKeys.map((connectionKey => {
return this._af.database.object(`/social/users/${connectionKey}`)
}))
);
});
}
以下是我的Angular 2视图中的相关代码(使用Ionic 2):
我觉得我的可观察性有问题,这就是为什么这个问题发生的原因。也许有人能解释一下吗?提前谢谢 我想你在评论中说对了。如果
connectionKeys
是一个空数组,则调用可观察。CombineTest
不合适:
导入'rxjs/add/observable/of';
if(connectionKeys.length==0){
([])的可观测收益率;
}
返回connectionKeyObservable.CombineTest(
connectionKey.map(connectionKey=>
此.u af.database.object(`/social/users/${connectionKey}`)
)
);
您是否用this.requests=requests验证了这一点代码>最终接收并分配一个空数组?实际上,这很奇怪。我正在查看数据库,“accepted”字段将为true,但不管数组中的最后一个元素是什么,它都会留在那里。当map函数没有要迭代的键时,subscribe看起来并没有发出信号。现在,我认为这个答案应该是正确的。我想我也应该喝完这杯咖啡。哦,我的天哪,这就成功了!疯狂的是,我实际上在尝试类似的东西,但我没有添加那个重要的声明哈哈:P,但现在它就像一个符咒!太谢谢你了,我的头撞到精神墙已经好几个小时了
ionViewDidLoad() {
// Get current user (via local storage) and get their pending requests
this.storage.get('user').then(user => {
this._connections.getConnectionRequests(user.id).subscribe(requests => {
this.requests = requests;
})
})
}