Firebase Firestore показывает предупреждение - PullRequest
0 голосов
/ 02 мая 2018

Я работаю над проектом, в котором в качестве базы данных используется пожарный склад ionic 3 и firebase.

Но мой Firebase Firestore показывает предупреждение всякий раз, когда я выполняю операцию CRUD.

 index.esm.js:77 [2018-05-02T05:45:40.408Z]  @firebase/firestore: 
 Firestore (4.13.0): 
 The behavior for Date objects stored in Firestore is going to change
 AND YOUR APP MAY BREAK.
 To hide this warning and ensure your app does not break, you need to 
 add the
 following code to your app before calling any other Cloud Firestore 
 methods:

 const firestore = firebase.firestore();
 const settings = {/* your settings... */ timestampsInSnapshots: 
 true};
 firestore.settings(settings);

 With this change, timestamps stored in Cloud Firestore will be read 
 back as
 Firebase Timestamp objects instead of as system Date objects. So you 
 will also
 need to update code expecting a Date to instead expect a Timestamp. 
 For example:

 // Old:
 const date = snapshot.get('created_at');
 // New:
 const timestamp = snapshot.get('created_at');
 const date = timestamp.toDate();

 Please audit all existing usages of Date when you enable the new 
 behavior. In a
 future release, the behavior will change to the new behavior, so if 
 you do not
 follow these steps, YOUR APP MAY BREAK.

Ответы [ 5 ]

0 голосов
/ 18 мая 2018

Я только что переустановил "angularfire2". О проблеме уже исправлено.

  • npm удалить angularfire2
  • npm установить angularfire2@5.0.0-rc.9

информация о версии релиза: https://github.com/angular/angularfire2/releases

0 голосов
/ 13 мая 2018

Чтобы улучшить ответ от 'farkasnorbert90', что я использовал afs.firestore.settings вместо db.app.firestore () в моем app.component.ts

import * as firebase from 'firebase';
import { AngularFirestore } from 'angularfire2/firestore';

  constructor(
    public auth: AuthService,
    afs: AngularFirestore,
  ) {
    const settings: firebase.firestore.Settings = {
      timestampsInSnapshots: true,
    };
    afs.firestore.settings(settings);
  }
0 голосов
/ 04 мая 2018

Я добавил код ниже в app.module.ts, затем ошибка исправлена.

firebase.initializeApp (environment.firebase) // Загрузка настроек сервера firebase

firebase.firestore (). Settings ({timestampsInSnapshots: true})

0 голосов
/ 12 мая 2018

После того, как вы установите этот параметр, даты больше не будут возвращаться как даты в JavaScript. Они будут метками времени Firestore. Ваш код, скорее всего, будет затронут. Я создал следующую функцию для преобразования любых свойств Timestamp любого объекта в свойства Date в javascript.

private convertFirestoreTimestampsToDates(myObject: any): void {
  for (let propertyName in myObject) {
    if (myObject.hasOwnProperty(propertyName)) {
      if (myObject[propertyName]) {
        if (myObject[propertyName].__proto__.constructor.name === 'Timestamp') myObject[propertyName] = myObject[propertyName].toDate();
      }
    }
  }
}
0 голосов
/ 04 мая 2018

У меня была такая же проблема, если вы используете Angular и angularfire2, это может вам помочь:

Как показывает предупреждение, вы должны установить для свойства timestampsInSnapshots значение true при запуске приложения. Вы можете вызвать это в конструкторе AppComponent:

import { AngularFirestore } from 'angularfire2/firestore';

export class AppComponent {

    constructor(db: AngularFirestore) {
        const settings = { timestampsInSnapshots: true };
        db.app.firestore().settings(settings);   
    }

}

Чтобы избежать предупреждения, вы можете установить тип настроек:

import { AngularFirestore } from 'angularfire2/firestore';
import * as firebase from 'firebase';

export class AppComponent {

    constructor(db: AngularFirestore) {
        const settings: firebase.firestore.Settings = { timestampsInSnapshots: true };
        db.app.firestore().settings(settings);   
    }

}
Конструктор

AppModule также является хорошим местом для вызова этого кода, это зависит от вас, что вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...