在发送响应之前等待 firebase 电子邮件 success/failure

Wait for firebase email success/failure before sending response

在我的 firebase 应用程序中,我已经做到了这样一个用户可以向另一个用户发送电子邮件。我有一个节点服务器监听这些请求并通过 FireBase 和 Trigger Email 扩展发送它们。一旦我插入这样的文档 --

admin
.firestore()
.collection("mail")
.add({
  to: `${req.body.toEmail}`,
  message: {
    subject: "here is a subject",
    html: `here is a message`,
  },
})
.then((response) => {
    return res.status(200).json({
      message: "email sent!"
});

触发电子邮件有一些魔力(我认为它利用了云功能),然后在文档创建后开始更新文档。

文档将使用名为 state 的 属性 进行更新,该 ERRORSUCCESS。我需要等到该字段被添加和更新后才能向客户端返回响应。

有人处理过这个问题吗?

Trigger Email 扩展确实使用 Cloud Functions 并且所有函数实例 运行 彼此独立。一种解决方法是 return 在邮件集合中创建的新文档的 ID,并在客户端监听对该文档的更改:

return res.status(200).json({
  message: response.id // ID of new document
});

然后在您的客户端,您可以收听此文档的任何更新:

db.collection("mail").doc("THE_MAIL_ID")
    .onSnapshot((doc) => {
      const { state } = doc.data()
      if (state === "SUCCESS") {
        alert("Email Sent")
      } else if (state === "ERROR") {
        alert("Failed to send email")
      } else {
        alert("Email yet to be sent")
      }
    });

如果缺少“状态”字段,则触发电子邮件扩展尚未完成并更新回邮件文档,因此您必须等待收听者收到另一个更新。您 可以 在第一个函数本身和 return 文档更新后的响应中使用相同的逻辑,但这只会导致额外的云函数时间费用,可能会导致以防万一您出于某种原因超时。