Firebase 我们可以在一个云函数中批处理多个onCreate事件吗?

Firebase 我们可以在一个云函数中批处理多个onCreate事件吗?,firebase,firebase-realtime-database,google-cloud-functions,Firebase,Firebase Realtime Database,Google Cloud Functions,我有一个云函数newMessage来监听firebase实时数据库中的任何onCreate()事件。当触发newMessage功能时,它将获取消息内容的快照,并使用mailgun发送新消息的电子邮件通知。 伪代码类似于: exports.newMessage = functions.database .ref('/privateMessages/{userA}/{userB}/{messageId}') .onCreate((snap, context) => { let

我有一个云函数
newMessage
来监听firebase实时数据库中的任何onCreate()事件。当触发
newMessage
功能时,它将获取消息内容的快照,并使用mailgun发送新消息的电子邮件通知。 伪代码类似于:

exports.newMessage = functions.database
  .ref('/privateMessages/{userA}/{userB}/{messageId}')
  .onCreate((snap, context) => {
    let senderEmail, receiverEmail, messageContent;
    // 1. get message senderEmail, receiverEmail and messageContent from the snap and context.

    // 2. use mailgun to send email to receiverEmail for the new message
    let data = {
      from: senderEmail,
      to: receiverEmail,
      subject: 'New Message from Freebies',
      text: messageContent
    };

    mailgun.messages().send(data, (error, body) => {
      console.log(body);
    });
  })

  return null;
})

我担心的是,如果用户从
newMessage
中大量发送聊天信息,那么每次收到新消息时,它都会发送电子邮件。在接收者方面,如果收件箱中有太多的电子邮件通知,那会很烦人。因此,我的问题是,是否可以使用多个onCreate()来获取多条新消息,比如说在1小时内,并且只为这些新消息发送一封电子邮件?

只需使用时间戳或计数器字段来验证用户的收件箱中是否已经有新消息。@ConstantinBeer您能详细说明一下您的评论吗?时间戳或计数器应该放在哪里?在onCreate()中?如果是这样,下次触发onCreate()时,它是否能够获取上一个计数器?时间戳或计数器可以是全局访问值吗?谢谢您可以在云函数中使用全局变量来帮助您实现这一点。继续@ConstantinBeer提供的解决方案,这里有一个来自文档的示例,其中有一个使用全局变量的示例。通过这种方式,你应该能够实现一个计数器来避免垃圾邮件。谢谢@bhito。我会试试看,不客气!如果这对你有效,请将你的解决方案作为答案发布,以便其他人将来可以看到@damingzi