Node.js 通过云函数返回后,Web 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:

我想通过云函数返回firebase时间戳对象。在我将其返回到前端后,它不再具有firebase时间戳类型。 我得到的错误是::

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对象转换为时间戳,则需要从反序列化对象中读取秒和纳秒属性,并将它们传递给