作者:挡不住的向左寻找爱 | 来源:互联网 | 2023-02-12 12:21
我有一次查询,不想保留一个监听器,以便在发送手动触发器时更新数据.
所以我的查询是这样的:
var ref = this.instance.child('/user/manish/today/events')
.orderByChild('endDateTime')
.endAt(endEventTime)
.limitToLast(10)
.addListenerForSingleValueEvent(this.previousEventListeners);
this.previousEventListeners = new com.google.firebase.database.ValueEventListener({
onDataChange: (snapshot) => {
console.log("Value from native firebase access");
console.dump(this.testing(snapshot.getValue()));
let result = {
value : this.testing(snapshot.getValue()),
type : "ValueChanged"
};
console.dump(result);
},
onCancelled: (databaseError) => {
console.log(databaseError.getMessage());
hideActivtiyIndicator();
}
});
即使添加了与查询条件匹配的新记录,它也会返回相同的数据集.
谢谢
1> Chad Robinso..:
是的,我们在自己的应用中遇到过这种情况.如果您需要启用磁盘持久性的最新数据,则需要订阅所有事件值更新,而不仅仅是调用单个值.它特别令人困惑,因为尽管有这种行为,Firebase仍会调用服务器获取新值 - 它只是不会给你返回一个!
我向Firebase提交了一份支持请求,他们说这是预期的行为.我还建议他们澄清文件,他们说Thanks for this comprehensive feedback. We do value this kind of inputs from the developers. This will be included in our feature request list and will be discussed with our engineers. Unfortunately, I can't share any timeline or definite details as this will be monitored internally.
希望这能澄清情况.对于它的价值,我们用一个FIRDatabaseReference
类别(iOS,为您的平台使用适当的比喻)解决了这个问题,增加了一个额外的功能.它调用SingleValueEvent
然后在500ms后再次调用它,并将值两次返回给调用者.(如果调用者在此期间离开,则回调采用弱引用.)500ms似乎是一个不错的选择 - 用户被给予立即显示值,如果他们离线或网络很慢,那就是所有他们看到的.但如果他们在线并拥有良好的网络访问权限,那么很快就会为他们提供最新的数据.