javascript - Firestore:onWrite 将关键字数组字符串转换为小写项目
问题描述
设想
我希望能够在更新或创建操作时将关键字数组更改为小写,但是在删除时我想提前退出函数执行。
到目前为止,我已经完成了以下操作
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
。
问题
一旦我删除了关键字数组中的一个项目,我就会经历infinite loop
任何建议我都会非常感激。
谢谢。
解决方案
解决方案
上述问题的问题是我试图从关键字数组字段中删除一个项目。删除项目时,我指的是原始项目,而不是我应该参考修改后的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 }
);
}
推荐阅读
- mysql - MySQL 服务器中的 TLS 证书
- ide - IDE 的问题,当您在编辑器中单击一行时,光标不会转到最后写入的字符
- python - 如何使用python在两个特定字符串之间的网页中查找特定字符串?
- reporting-services - 如何根据 SSRS 报告中的列自定义排序
- c# - 如何在代码中将 3D 模型导入场景中的对象?
- json - jq 求和和乘以得到一个聚合值
- spring-integration - 网关方法中附加到同一请求通道的多个集成流
- html - 如何解决这个问题?旋转的 div 与背景颜色、相同的行高和适合内容的宽度相结合
- python - 在 Python 中“翻译”一个 Arduino 库
- python - 如何在 Python sqlite3 中使用元组选择 WHERE IN VALUES?