无法从 Firebase 云函数返回日期?

Eri*_*ric 8 javascript firebase google-cloud-functions

我试图简单地从 firebase 函数返回一个日期:

import * as functions from 'firebase-functions';

const date = functions.https.onCall(() => {
  return {
    date: new Date(),
    iso: new Date().toISOString()
  };
});
export default date;
Run Code Online (Sandbox Code Playgroud)

但这是我得到的结果(使用 firebase 函数:shell):

RESPONSE RECEIVED FROM FUNCTION: 200, {
  "result": {
    "date": {},
    "iso": "2018-12-08T18:00:20.794Z"
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意 Date() 对象被序列化为一个空对象,这似乎是错误的?我本来希望至少有一个 .toString() 或 Date 实例的东西......

这是否意味着我必须明确避免返回 Date 实例?我可以编写一个自定义序列化程序,将我的函数包裹起来,通过 .toISODate() 等将 Date 实例深度转换为字符串,但这似乎我必须遗漏一些东西!

谢谢。

Dou*_*son 6

如果你有一个日期对象d,你应该:

  1. 以毫秒为单位发送其 unix 纪元时间d.getTime(),或
  2. 将 JSON 序列化形式发送给它d.toJSON()

我建议#1,因为它更容易与不同的系统互操作。每个系统都了解 unix 纪元时间的日期,并且该数字不需要解析。

  • 谢谢。我最终构建了一个递归序列化器,它遍历任何响应对象并将日期转换为它们的 ISO(字符串)表示,但你的纪元时间也会很棒。对我来说,混淆只是通过返回一个 Date 实例来获得一个空对象——我谦虚地说,这种行为违反了“最少惊喜”原则!关闭。 (5认同)