Firebase 云函数:部署的 onCreate 函数未触发

时间:2021-03-27 01:54:41

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

我正在开发 Flutter 聊天应用。我想在消息创建时触发一个函数。

const functions = require("firebase-functions");


exports.delMessages = functions.firestore.document("chats/{msgId}")
    .onCreate((snap, context) => {
      functions.logger.log(snap.data());
    });

但是,发送消息时日志不会更新。这是我第一个使用 firebase 的真正项目,查看文档和其他 StackOverflow 问题并且没有任何洞察力。 firebase 应用程序在 Flutter 代码中初始化。我该怎么办?

1 个答案:

答案 0 :(得分:1)

由于 Cloud Functions 的运行时间尽可能短,因为它们按资源使用量按秒计费,因此一旦您的函数完成其主要工作,它将尽快关闭。

文档中没有明确说明,但是使用 Cloud Functions 记录器 SDK 的调用是异步处理的,因为它们构建在 StackDriver 日志记录库之上。

简单地记录一条消息然后结束该功能可能会导致您的日志消息没有得到及时处理。如果您要强制您的函数花费更长的时间,它应该在关闭之前留出足够的时间来处理消息。

exports.delMessages = functions.firestore.document("chats/{msgId}")
  .onCreate((snap, context) => {
    functions.logger.log(snap.data());

    return new Promise(resolve => setTimeout(resolve, 2000)); // wait 2 seconds
  });

或者,您可以直接使用记录器 SDK,这样您就可以使用 log.write(),它返回一个 Promise,在写入日志时解析。

const {Logging} = require('@google-cloud/logging');
const logging = new Logging();

exports.delMessages = functions.firestore.document("chats/{msgId}")
  .onCreate(async (snap, context) => {
    const log = logging.log('new-messages');

    await log.write(log.entry(snap.json())); // wait for log to be written
  });
相关问题