Firestore云功能未触发

时间:2020-05-28 10:41:21

标签: node.js firebase google-cloud-firestore google-cloud-functions

我是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”

firestore db屏幕截图 enter image description here

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写入数据库的异步工作为止。