Ich habe diese Warnung kürzlich erhalten:
Das Verhalten für Date-Objekte, die in Firestore gespeichert sind, ändert sich UND IHRE APP KANN BRECHEN . Um diese Warnung auszublenden und sicherzustellen, dass Ihre App nicht beschädigt wird, müssen Sie die .__ hinzufügen. Geben Sie folgenden Code für Ihre App ein, bevor Sie andere Cloud Firestore-Methoden aufrufen:
const firestore = new Firestore();
const settings = {/* your settings... */ timestampsInSnapshots: true};
firestore.settings(settings);
Mit dieser Änderung werden in Cloud Firestore gespeicherte Zeitstempel gelesen zurück als Firebase-Timestamp-Objekte statt als System-Date-Objekte . Daher müssen Sie auch den Code aktualisieren, der stattdessen ein Datum auf .__ erwartet. Erwarte einen Zeitstempel. Zum Beispiel:
// Old:
const date = snapshot.get('created_at');
// New:
const timestamp = snapshot.get('created_at');
const date = timestamp.toDate();
Bitte prüfen Sie alle bestehenden Verwendungen von Date, wenn Sie das neue .__ aktivieren. Verhalten. In einer zukünftigen Version wird das Verhalten in das neue .__ geändert. Verhalten, also wenn Sie diese Schritte nicht befolgen, KANN IHRE APP BREAK.
Ich versuche, die vorgeschlagene Korrektur im Admin-SDK in meinem Cloud Functions-Code zu implementieren, da das meiste, was ich tue, da ist.
Ich habe versucht, admin.firestore().settings({ timestampsInSnapshots: true })
zu verwenden, bekam aber folgende Warnung:
admin.firestore (...). Einstellungen sind keine Funktion
Wie löse ich es?
Ich hatte das gleiche Problem. Ich musste die Firebase-Funktionen und den Firebase-Admin aktualisieren.
Um ein Upgrade durchzuführen, gehen Sie zu Ihrer CLI und dann
ProjectDirectory > Functions > npm install [email protected] [email protected] --save
Dann oben, bevor Sie Funktionen auslösen:
const firestore = admin.firestore();
const settings = {timestampsInSnapshots: true};
firestore.settings(settings);
Ändern Sie, um den Fehler "Firestore.settings () wurde bereits aufgerufen" zu verhindern
db.settings(settings);
zu
try{ db.settings(settings); }catch(e){}
ich habe gelöst mit:
const settings = { timestampsInSnapshots: true };
const db = admin.firestore();
db.settings(settings);
db.collection('any');