场景
我希望能够在更新或创建操作时将关键字数组更改为小写,但是在删除时我想提前退出函数执行。
到目前为止我已经完成了以下操作
import * as functions from "firebase-functions";
export const onCourseCreate = functions.firestore.document("courses/{id}")
.onWrite((snap, context) => {
return changeToLowerCase(snap);
});
function changeToLowerCase(
snap: functions.Change<FirebaseFirestore.DocumentSnapshot>
) {
if (!snap.before.exists) return null;
const original = snap.before.data();
if (original == undefined) return;
const _keywords: string[] = original.keywords;
const keywords: string[] = [];
_keywords.forEach((item: string) => {
const lowercase = item.toLowerCase();
keywords.push(lowercase);
});
return snap.after.ref.set(
{
keywords
},
{ merge: true }
);
}
还有
我已经厌倦了snap.after.exists
。
问题
一旦删除关键字数组中的项目,我就会经历无限循环
任何建议我都会非常感激。
谢谢。
最佳答案
解决方案
上述问题的问题是我试图从关键字数组字段中删除一个项目。删除项目时,我指的是原始项目,而不是指修改后的 snap.after.data()
。
这是一个非普遍问题,它是我的特定用例所特有的。对于感兴趣的人来说,这是最终的解决方案:
import * as functions from "firebase-functions";
export const onCourseCreate = functions.firestore.document("courses/{id}")
.onWrite((snap, context) => {
return changeToLowerCase(snap);
});
function changeToLowerCase(
snap: functions.Change<FirebaseFirestore.DocumentSnapshot>
) {
if (!snap.after.exists) return null;
const original = snap.before.data();
const modified = snap.after.data();
if (modified == undefined) return null;
if (original != undefined && modified.keywords.length < original.keywords.length)
return null;
const _keywords: string[] = modified.keywords;
const keywords: string[] = [];
_keywords.forEach((item: string) => {
const lowercase = item.toLowerCase();
keywords.push(lowercase);
});
return snap.after.ref.set(
{
keywords
},
{ merge: true }
);
}
关于javascript - 火存储 : onWrite Convert Keywords Array String to Lower Case Items,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629567/