我下面的代码尝试将Timestamp
插入Firebase。我指的是this one here。我计划检索插入的Timestamp
并将所说的Timestamp
转换为Timestamp
JS对象,以便在用户请求该时间时显示。我尝试检索说的Date
并遇到了一些对我来说很奇怪的事情。
最初,我具有以下代码:
Timestamp
我很快注意到我正在打破我的let newRef = firebase.database().ref().child('fs').push(); //'fs' here is one of the nodes in my Firebase
newRef.set({
//Set some other data
timeCreated: firebase.database.ServerValue.TIMESTAMP
}).then(() => {
console.log('Insert successful');
});
newRef.once('value').then((snapshot) => {
console.log(snapshot.val().timeCreated);
console.log(new Date(snapshot.val().timeCreated));
});
链。因此,我将其更改为以下内容:
Promise
它检索了正确的数据。
我对初始代码感到困惑。当let newRef = firebase.database().ref().child('fs').push();
newRef.set({
//Some other data
timeCreated: firebase.database.ServerValue.TIMESTAMP;
}).then(() => {
console.log('Insert successful');
return newRef.once('value').then((snapshot) => snapshot.val().timeCreated);
}).then((timeRetrieved) => {
console.log(timeRetrieved);
console.log(new Date(timeRetrieved);
});
的过程尚未完成时,为什么Firebase仍能以某种方式成功地检索到timeCreated
?我看着set()
,第一个出现的是读取数据过程。但是,由于Firebase甚至没有设置console.log(...)
的值,我不应该读取timeCreated
或其他类似null
的值吗?相反,读取数据代码返回的null
值要比Timestamp
的{{1}}略小。
编辑
根据请求,这些是我使用初始代码得到的结果:
但是,存储在我的Firebase中的Timestamp
的值为:set()
,与上图的结果不同(上图的结果是{{1}的结果} [{timeCreated
])。
答案 0 :(得分:1)
执行此代码时:
let newRef = firebase.database().ref().child('fs').push(); //'fs' here is one of the nodes in my Firebase
newRef.set({
//Set some other data
timeCreated: firebase.database.ServerValue.TIMESTAMP
}).then(() => {
console.log('Insert successful');
});
newRef.once('value').then((snapshot) => {
console.log(new Date(snapshot.val().timeCreated));
});
您将按以下顺序执行日志:
console.log(new Date(snapshot.val().timeCreated));
console.log('Insert successful');
那是因为set()
是异步的,所以它之后的代码将在数据检索之前执行。
相反,读取数据代码返回的Timestamp值要比要
set()
的Timestamp小。
由于您在Date()
中创建了一个新的console.log()
,因此您可能有以下时间。
console.log(new Date(null));