我正在使用Typescript编写云函数,但是我认为Javascript应该是同样的问题。
我得到了和每个人相同的警告:
Firestore中存储的Date对象的行为将改变 而且您的应用可能会崩溃。隐藏此警告并确保您的应用确实 不间断,您需要先在应用中添加以下代码 调用其他任何Cloud Firestore方法:
const firestore = new Firestore(); const设置= {/ *您的 设置... * / timestampsInSnapshots:true};
firestore.settings(settings);进行此更改后,将读取存储在Cloud Firestore中的时间戳记 作为Firebase Timestamp对象而不是作为系统Date对象返回。 因此,您还需要更新期望使用Date的代码 期待一个时间戳。例如:
//旧:const date = snapshot.get('created_at'); //新增:const 时间戳= snapshot.get('created_at'); const date = timestamp.toDate();
启用新功能后,请审核Date的所有现有用法 行为。在将来的版本中,行为将更改为新的 行为,因此,如果您不执行这些步骤,则您的应用可能会崩溃。
因此,我在stackoverflow上找到了答案,但没有一个真正起作用。 我基本上在我的代码中在index.ts的顶部(导入后)添加了以下内容:
admin.initializeApp()
export const firestore = admin.firestore()
firestore.settings({timestampsInSnapshots: true})
然后,我将功能部署在firebase上。一切都好!
调用触发器时出现问题。例如创建通知时:
export const onNotificationCreate = functions.firestore.document('notifications/{notificationsID}').onCreate(async notification => { }
我用来构建通知对象的接口是:
export interface Notification {
created: any,
type: NotificationType,
content: {
post?: DocumentReference,
comment?: DocumentReference
}
emitters: DocumentReference[],
owner: DocumentReference
}
并且为了构建该对象,我从数据存储区获取了日期。
export const onPostCommentCreate = functions.firestore.document('blogpost/{blogpostID}/comments/{commentID}').onCreate(async (comment, context) => {
const commentData = comment.data()
const commentDate = commentData['created']
您知道为什么我在Firestore云功能日志中仍然有警告吗?
谢谢。