gpt4 book ai didi

google-cloud-functions - Firestore + 云函数 : How to tell if it's a create, 更新或删除事件

转载 作者:行者123 更新时间:2023-12-04 17:15:53 24 4
gpt4 key购买 nike

我想编写一个由 Firestore 写入事件触发的 Firebase 云函数。在函数内部,我必须知道写入实际上是创建、更新还是删除函数。逻辑略有不同,但我不想复制和粘贴三个不同的事件处理程序。我如何知道它是哪种事件类型?

云文档读起来让我很困惑。

事件的文档说,在 FireStore 的情况下,事件实际上是一个 DeltaDocumentSnapshot。

https://firebase.google.com/docs/reference/functions/functions.Event

DeltaDocumentSnapshot 的文档表明该类没有关于事件本身的信息(例如,创建、更新或删除的指示),而只有目标文档:

https://firebase.google.com/docs/reference/functions/functions.firestore.DeltaDocumentSnapshot

我找到了一些示例,作者似乎通过检查当前或以前的文档是否存在来推断创建/更新/删除。我已经试过了,但出现错误。

https://github.com/firebase/functions-samples/blob/master/child-count/functions/index.js#L30

这是我尝试过的:

exports.updateLikeCount = functions.firestore
.document('likes/{likeId}').onWrite((event) => {
if (event.data.data().exists()) {
// Looks like the document still exists. It must be an update or create.
}

if (event.data.previous.data().exists()) {
// Looks like the document existed before. It must be an update or delete.
}

该代码失败并出现此错误:
TypeError: event.data.exists is not a function

最佳答案

使用 firebase-functions 1.0 版的 new release,检查这个的函数可能如下所示(在 typescript 中):

import { Change } from 'firebase-functions';

export function checkEventType(change: functions.Change<FirebaseFirestore.DocumentSnapshot>): string {
const before: boolean = change.before.exists;
const after: boolean = change.after.exists;

if (before === false && after === true) {
return 'create';
} else if (before === true && after === true) {
return 'update';
} else if (before === true && after === false) {
return 'delete';
} else {
throw new Error(`Unkown firestore event! before: '${before}', after: '${after}'`);
}
}

我已经测试了这个函数,并且与 .onWrite() 事件结合使用效果很好。

关于google-cloud-functions - Firestore + 云函数 : How to tell if it's a create, 更新或删除事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47499062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com