Node.js 通过云函数返回后,Web Firebase变量从时间戳类型更改为对象类型
我想通过云函数返回firebase时间戳对象。在我将其返回到前端后,它不再具有firebase时间戳类型。 我得到的错误是::Node.js 通过云函数返回后,Web Firebase变量从时间戳类型更改为对象类型,node.js,firebase,google-cloud-firestore,google-cloud-functions,Node.js,Firebase,Google Cloud Firestore,Google Cloud Functions,我想通过云函数返回firebase时间戳对象。在我将其返回到前端后,它不再具有firebase时间戳类型。 我得到的错误是:: timestamp.toMillis is not a function (toMillis是特定于firebase时间戳的方法,) 如果不使用云函数直接从前端获取数据,则类型保持不变 来自后端的代码返回: snapshot.forEach(doc => { messageArray.push({ ... timestamp:
timestamp.toMillis is not a function
(toMillis是特定于firebase时间戳的方法,)
如果不使用云函数直接从前端获取数据,则类型保持不变
来自后端的代码返回:
snapshot.forEach(doc => {
messageArray.push({
...
timestamp: doc.data().timestamp,
...
});
});
return messageArray;
前端:
var getMessages = firebase.functions().httpsCallable('getMessages');
getMessages({
data: displayName,
chatType: chatType
}).then(function (result) {
console.log("loading messages");
result.data.forEach(message => {
console.log(typeof message.timestamp);
console.log(message.timestamp);
var timestamp = message.timestamp;
var millis = timestamp.toMillis();
});
如果我在没有云功能的情况下获取数据,它会起作用:
query.onSnapshot(function (snapshot) {
snapshot.docChanges().forEach(function (change) {
if (change.type === 'removed') {
deleteMessage(change.doc.id);
} else {
var message = change.doc.data();
console.log(message.timestamp);
console.log(typeof message.timestamp);
var timestamp = message.timestamp;
var millis = timestamp.toMillis();
}
});
});
为什么类型会更改?如何将其转换为firebase时间戳
云功能版本日志:
仅前端版本日志:
可调用类型的云函数将响应序列化为纯JSON。不保留任何对象类型。当您在响应中有一个Timestamp对象时,Functionosn SDK将简单地对其调用
toJSON
,以获取用于序列化的JSON对象。同样,当它到达客户端应用程序时,它将完全丢失其类型信息,并且只包含秒和纳秒组件的属性。这就是您的控制台日志实际显示的内容—一个具有两个属性的普通JavaScript对象
如果要在客户端将该JSON对象转换为时间戳,则需要从反序列化对象中读取秒和纳秒属性,并将它们传递给