【问题标题】:can't return a date from a firebase cloud function?无法从 Firebase 云函数返回日期?
【发布时间】:2019-05-10 03:49:58
【问题描述】:

我正在尝试从 firebase 函数中简单地返回一个日期:

import * as functions from 'firebase-functions';

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

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

RESPONSE RECEIVED FROM FUNCTION: 200, {
  "result": {
    "date": {},
    "iso": "2018-12-08T18:00:20.794Z"
  }
}

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

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

谢谢。

【问题讨论】:

    标签: javascript firebase google-cloud-functions


    【解决方案1】:

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

    1. 使用d.getTime() 以毫秒为单位发送其unix 纪元时间,或者
    2. 使用 d.toJSON() 发送 JSON 序列化表单。

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

    【讨论】:

    • 谢谢。我最终构建了一个递归序列化程序,它遍历任何响应对象并将日期转换为它们的 ISO(字符串)表示,但是你的纪元时间也会很棒。对我来说,困惑是仅仅通过返回一个 Date 实例就得到了一个空对象——我谦虚地提出,这种行为违反了“最少惊喜”原则!结束。
    猜你喜欢
    • 2019-12-17
    • 2021-10-01
    • 1970-01-01
    • 2021-02-12
    • 2019-08-21
    • 2020-03-31
    • 2021-03-04
    • 2019-02-27
    • 2018-03-28
    相关资源
    最近更新 更多