我是Firebase云功能的新手。因此,我按照Firebase YouTube频道中的教程进行操作。 因此,我创建了一个函数,该函数应在添加Firestore文档时触发,但没有触发。
这是功能
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
exports.whenAddData = functions.firestore
.document("chats/{userId}")
.onCreate((change, context) => {
const msg = change.data().msg;
const modifiedMsg = addImoji(msg);
console.log("data changing");
return change.ref({ msg: modifiedMsg });
});
const addImoji = (msg) => {
return msg.replace(/\bPizza\b/g, " ? ");
};
firebase-functions版本:“ ^ 3.6.1”
答案 0 :(得分:2)
首先,您的正则表达式是错误的。区分大小写,这意味着您的屏幕快照“ i love pizza”中的消息与“ Pizza”不匹配。要使其不区分大小写(并因此匹配“ Pizza”,“ pizza”,“ piZZA” ...),请在末尾添加i
标志:
const addImoji = (msg) => {
return msg.replace(/\bpizza\b/gi, "?");
};
第二,您的函数返回数据库引用。它实际上并不通过调用set()
或update()
存储新数据。您的代码应为:
return change.ref.update({ msg: modifiedMsg });
任何异步Firebase函数都应返回一个Promise(update()
返回一个Promise)。否则,该功能将无法正确终止。
通过返回update
的结果,您的函数将继续运行,直到完成将新的msg
写入数据库的异步工作为止。