Облачные функции firestore не запускаются - PullRequest
0 голосов
/ 28 мая 2020

Я новичок в облачных функциях 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 enter image description here

1 Ответ

2 голосов
/ 28 мая 2020

Прежде всего, ваше регулярное выражение неверно. Он чувствителен к регистру, что означает, что сообщение на вашем скриншоте «я люблю пиццу» не соответствует «Пицца». Чтобы сделать регистр нечувствительным (и, таким образом, соответствовать «Pizza», «pizza», «piZZA» ...), добавьте в конце флаг i:

const addImoji = (msg) => {
  return msg.replace(/\bpizza\b/gi, "?");
};

Во-вторых, ваша функция возвращает базу данных ссылка. Фактически он не сохраняет новые данные, вызывая set() или update(). Ваш код должен быть:

return change.ref.update({ msg: modifiedMsg });

Любая функция asyn c Firebase должна возвращать обещание (а update() возвращает обещание). Если этого не произойдет, функция не завершится правильно.

При возврате результата update ваша функция будет продолжать работать до тех пор, пока не будет завершена асинхронная работа по записи нового msg в базу данных. .

...