angular - 如何使用 Firebase 函数和 Firestore 返回承诺?
问题描述
当用户提出请求时,firestore
正在使用其各自的数据创建文档。文档的创建会触发firebase function
然后将电子邮件发送到特定地址。它工作正常,但是当此电子邮件已发送/未发送时,我如何从函数中获得返回成功/错误警报(客户端)的承诺。
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
exports.request = functions.firestore.document('requests/{requestId}').onCreate(async (snapshot, context) => {
const itemDataSnap = await snapshot.ref.get();
const name = itemDataSnap?.data()?.name ? itemDataSnap?.data()?.name : 'Unbekannt';
const email = itemDataSnap?.data()?.email;
const products = itemDataSnap?.data()?.products ? itemDataSnap?.data()?.products : 'Fehler: Keine Produkte vorhanden';
return admin.firestore().collection('mail').add({
to: [...],
from: [email],
message: {
subject: ...,
html: ...
}
}).then(() => console.log('Queued email for delivery!'))
});
如您所见,到目前为止,我正在记录'Queued email for delivery!'
Firebase 控制台的成功消息 -但是我怎样才能将它带到客户端(给用户)?
解决方案
您的云函数是通过写入数据库来触发的。无法从那里直接向客户端返回值,因为此代码与客户端之间没有直接连接。
你有两个选择:
- 将此更改为可调用的 Cloud Function,然后执行写入数据库并返回值。
- 将结果写入数据库,让客户端等待。
例如,后者可以通过设置responses/{requestId}
云函数写入的集合/文档来完成。并且由于文档 ID 与请求 ID 相同,因此客户端可以等待该文档被写入。
mail
您还可以将集合中的文档 ID基于requestId
,在这种情况下,客户端也可以等待该文档显示:
return admin.firestore().collection('mail').doc(context.params.requestId).set(...)
推荐阅读
- java - OAuth 2 spring Webclient 用于密码授予
- ruby-on-rails - 生产中的 Rails 环回/重定向问题
- ngdraggable - 当在表格单元格(td)中使用时,ngDraggable 不提供正在删除项目的目标容器属性
- apache-kafka - 创建生产者绑定失败
- python - 如何使用估计器获得用于混淆矩阵的类分数?
- c# - 如何使用 angular 和 asp.net 按需下载批量 PDF 文件?
- javascript - 嵌套witin特定文件夹中的匹配文件
- c - Shanon压缩算法输出错误
- java - Spring Boot @RestRepositoryResouce:修补布尔属性不起作用
- visual-studio-2017 - Visual Studio:如何显示迁移报告?