google-cloud-firestore - Cloud Functions:如何动态更改 Cloud Firestore 触发器
问题描述
我的应用使用 Firestore 集合“users/{userId}/alarms/2019/10”,其中 2019 是当前年份,10 是当前月份。我使用了一个 Cloud Firestore 触发器,该触发器在此集合发生更改时被调用。
在下月初(11月),我想每个月监控“users/{userId}/alarms/2019/11/{alarm}”,等等。我尝试了使用“firebase deploy --only 函数”部署的以下代码。
exports.changeMonthAlarmsListener = functions.pubsub.schedule('0 0 1 * *').onRun((context) => {
const currentDate= new Date();
const year = currentDate.getFullYear();
const month = currentDate.getMonth()+1;
console.log('new Firestore Cloud trigger for users/{user}/alarms/%d/%d/{alarm}', year, month);
exports.monthAlarmsListener = functions.firestore
.document('users/{user}/alarms/'+year+'/'+month+'/{alarm}')
.onWrite((change, context) => {
console.log('user %s: change for alarm %s', context.params.user, context.params.alarm);
});
return true;
});
我从云控制台执行了 changeMonthAlarmsListener。我观察到跟踪“用户/{user}/alarms/2019/10/{alarm} 的新 Firestore 云触发器”。然后我在 Firestore 集合“users/a_user/2019/10”中创建了一个文档“foo”,但似乎从未执行过 monthAlarmsListener,因为没有跟踪“user a_user:更改警报 foo”。
我猜想动态定义一个新的 Cloud 函数并不像我这样声明它那么简单。但是如何进行呢?我在 Cloud Functions 的文档中没有找到任何内容。
解决方案
不可能从另一个函数的执行中动态部署一个函数。如果您想要另一个函数,则必须静态定义它并使用 CLI 部署它。如果您确实需要针对日期部分的各种组合使用不同的功能,听起来您最终会为每个可能的组合创建一个新函数,或者只是决定使用单个函数在每次调用每个组合时如何处理它。
推荐阅读
- javascript - jquery加载方法不加载站点脚本和css为什么?
- regex - 为什么我的正则表达式在在线正则表达式测试仪上运行时无法选择正确的元素
- laravel - 如何检查身份验证登录 3 表 laravel?
- r - 使用以 R 中的第一个条件为条件的条件进行过滤
- uwp - 从 Dynamics 门户分发 Windows 10 应用程序
- c# - 如何在 .NET 核心上生成 RSA 密钥对?
- python - 如何为 Keras 实现 KL 散度正则化?
- sql-server - 擦洗数据后尝试获取平均值、标准差和新行数
- sql - SSIS:无法插入 NULL
- android - 在动态功能模块之间共享信息