Firestore 云功能按预期在模拟器上运行,但在部署到 Firestore 后却不起作用

Firestore cloud function working on emulator as expected but not after deployment on firestore

我的云函数在 firebase 模拟器上运行良好,尽管在部署到 firestore 后,它无法运行。尽管没有任何反应,函数仍然执行。

在引入 statusValue 的 if 语句之前,它在 firestore 中工作。虽然,即使在引入 if 语句之后,它仍然在模拟器中按预期工作。

我已经删除并重新部署了功能并安装了最新版本的节点,但没有成功。

感谢帮助!

const functions = require("firebase-functions");
const admin = require('firebase-admin');
admin.initializeApp();

// capture group members when a new message is added to a group to notify them
exports.newMessage = functions.region('australia-southeast1')
.firestore
.document('ChatRooms/{chatRoomsID}/Messages/{messageID}')
.onCreate(async (snap, context) => {
  const messageData = snap.data();
  const messageSender = messageData.fullName;

  // access the documentRef at collection level
  const chatRoomRef = snap.ref.parent.parent;

  // access the data at collection level
  const chatRoomSnap = await chatRoomRef.get();
  const chatRoomData = chatRoomSnap.data();
  const groupMembers = chatRoomData.members;
  const activeUsers = chatRoomData.activeUserStatus;
  const chatRoomTitle = chatRoomData.chatRoomTitle;
  const notificationTitle = `ChatRoom: ${chatRoomTitle}`
  const notificationBody = `${messageSender} sent a message`;

  groupMembers.forEach((item, i) => {

    const statusValue = activeUsers[item]

    if (statusValue == 0) {
      const topic = item.replace(/[^a-zA-Z0-9]/g,'-');

      const message = {
        notification : {
            title : notificationTitle,
            body: notificationBody
        },
        apns: {
          payload: {
            aps: {
              sound : `default`
            }
          }
        },
        topic: topic,
      };
      // send notification subscribed to topic
      admin.messaging().send(message).then((response) => {
        console.log(`Successfully sent message to ${topic}`, response);
      }).catch((error) => {
        console.log('Error sending message:', error);
      });
    };
  });
});

以上是在模拟器中运行,查看日志:

i 个函数:开始执行“australia-southeast1-newMessage”

i 功能:在 ~1s

中完成“australia-southeast1-newMessage”

成功发送消息至5-3-com项目/

已成功向 3-4-com 项目发送消息/

当部署到 firestore 中时,firestore 函数中的日志显示函数正在执行,但没有向主题发送任何消息。

上午 7:53:04.745 新消息 函数执行开始

7:53:05.807 上午 新消息 函数执行耗时 1063 毫秒,完成状态:'ok'

您必须 returning 值,承诺值或空值。如果您需要多个承诺来解决,您可以使用 await Promise.all() 或根据您的设计使用 .allSettled()

同样发生的是,由于 async 没有任何等待或 return,它将在解析 .then() 之前完成,因为它是 async

这是因为仿真不是与 Cloud Functions 的一对一比较。