在发送响应之前等待 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
的 属性 进行更新,该 ERROR
或 SUCCESS
。我需要等到该字段被添加和更新后才能向客户端返回响应。
有人处理过这个问题吗?
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 文档更新后的响应中使用相同的逻辑,但这只会导致额外的云函数时间费用,可能会导致以防万一您出于某种原因超时。
在我的 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
的 属性 进行更新,该 ERROR
或 SUCCESS
。我需要等到该字段被添加和更新后才能向客户端返回响应。
有人处理过这个问题吗?
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 文档更新后的响应中使用相同的逻辑,但这只会导致额外的云函数时间费用,可能会导致以防万一您出于某种原因超时。