以下代码在浏览器中本地运行。在页面刷新时,它检索前2个对象并将三个对象值写入控制台。
ref.orderByChild("Timestamp").limitToLast(2).on("child_added", function (snapshot) {
var payload = snapshot.val();
var file = payload.filePayload;
var timestamp = payload.TimeStamp;
var sDate = payload.DateString;
console.log(file);
console.log(timestamp);
console.log(sDate);
});
像
这样的东西ImageOne.jpg
1448683124188
Nov 27, 5:30pm
问题是当在数据库中创建一个新条目时,我只获取文件名,而另外两个(时间戳和日期)在控制台输出中是“未定义的”。
如果我刷新页面,则会正确填充这些未定义的字段。 它总是缺少那两个值。永远不要提交
答案 0 :(得分:1)
问题似乎是,只要你执行“setValue”,它就会写入数据库并通知客户端。即使您有更多数据要写,它们也会检索数据。
我做的事情是:
Firebase newItem = firebase.push();
newItem.child("filePayload").setValue(fileString);
newItem.child("TimeStamp").setValue(ServerValue.TIMESTAMP);
newItem.child("DateString").setValue(now);
第一个setValue发生后,客户端就会收到通知并获得数据,但只有filePayload。其他两个值仍然写入数据库。如果客户端刷新,则检索所有三个值。
我将代码更改为以下内容,现在可以正常使用
Firebase newItem = firebase.push();
Map<String, Object> entry = new HashMap<String, Object>();
entry.put("filePayload", fileString);
entry.put("DateString", now);
entry.put("TimeStamp", ServerValue.TIMESTAMP);
newItem.setValue(entry);