【问题标题】:Firestore getting Javascript Date instead of TimestampFirestore 获取 Javascript 日期而不是时间戳
【发布时间】:2018-11-05 10:10:40
【问题描述】:

我正在使用Angular 6Firestore 开发一个应用程序,我将我的日期保存为Javascript 的Date 对象。问题是当我执行 snapshotChanges() 时,它返回一个 Unix Timestamp 而不是我数据库中的 Date 对象。

我在网上搜索了解决方案(thisand this)并找到了 Firestore 的这个配置选项

{ timestampsInSnapshots: false }

我正在尝试将它应用到我的应用组件中,如下所示:

constructor(private _db: AngularFirestore) {
    _db.firestore.settings({ timestampsInSnapshots: false });
  }

但后来我得到了这个错误

Firestore has already been started and its settings can no longer be changed. You can only call settings() before calling any other methods on a Firestore object.

我也尝试在调用 snapshotChanges() 之前更改设置,但这也不会对行为产生任何影响。

注意:我也在使用AngularFirestoreModule.enablePersistence()

更新:

我试过this,它给了我这个错误:

@firebase/firestore: Firestore (5.0.3): The behavior for Date objects stored in Firestore is going to change AND YOUR APP MAY BREAK.

任何建议都会很棒。

【问题讨论】:

    标签: angular firebase google-cloud-firestore angular6


    【解决方案1】:

    嗯,请尝试致电 _db.app.firestore().settings({}),因为您正在进行应用范围内的更改/配置。既然你已经提到你需要enablePersistence() 的离线支持,请尝试在这种情况下在你的组件中调用它,而不是根模块,但在调用 settings() 之后。

    在您的组件中:

    constructor(private _db: AngularFirestore) {
        _db.app.firestore().settings({ timestampsInSnapshots: false });
        _db.app.firestore().enablePersistence();
    }
    

    【讨论】:

    • Property app does not exist on AngularFirestore_db.firestore(): there is no such function
    • 好的。当您在组件中执行 `_db.firestore.settings({ timestampsInSnapshots: false });` 并在此之后立即调用 enablePersistence() 时会发生什么?
    • 我仍然收到Firestore has already been started 错误。如果我在我的 appModule 中执行此操作,我会收到 AND YOUR APP MAY BREAK 错误。
    • 实际上,通过在我的App Module 中的设置之后立即调用enablePersistence() 可以解决问题,但我应该担心重大更改吗?我应该怎么做才能使其兼容?
    • 这很奇怪。 app 应该存在,正如您在源代码中看到的那样。 angular2 请分享您的 Firebase 和 AngularFire2 版本。如果可能的话,你的回购。
    【解决方案2】:

    通过将以下代码添加到我的应用程序控制,我能够实现所需的功能。

    constructor(private _db: AngularFirestore) {
      _db.firestore.settings({ timestampsInSnapshots: false });
      _db.firestore.enablePersistence();
    }
    

    请记住,如果您打算使用上述代码,请不要AngularFirestoreModule.enablePersistence()。只需添加AngularFirestoreModule 就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-09
      • 2021-09-17
      • 2015-04-25
      • 1970-01-01
      • 2019-10-06
      • 2015-11-29
      • 1970-01-01
      相关资源
      最近更新 更多