云功能:如何动态更改Cloud Firestore触发器

时间:2019-10-07 15:49:28

标签: google-cloud-firestore google-cloud-functions

我的应用使用Firestore集合“ users / {userId} / alarms / 2019/10”,其中2019是当前年,而10是当前月。我使用Cloud Firestore触发器,当此集合发生更改时会调用该触发器。

在下个月(11月)开始时,我想监视“ users / {userId} / alarms / 2019/11 / {alarm}”,每个月等等。 我尝试使用“ firebase deploy --only functions”部署的以下代码。

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;
});

我从Cloud控制台执行了changeMonthAlarmsListener。我观察到了跟踪“用户/ {user} / alarms / 2019/10 / {alarm}的新Firestore Cloud触发器”。然后我在Firestore集合“ users / a_user / 2019/10”中创建了一个文档“ foo”,但由于没有跟踪“ user a_user:更改为警报foo”,因此似乎从未执行monthAlarmsListener。

我猜想动态定义一个新的Cloud函数并不像声明它那样简单。但是如何进行?在Cloud Functions文档中找不到任何内容。

1 个答案:

答案 0 :(得分:0)

不可能从另一个函数的执行中动态部署一个函数。如果需要其他功能,则必须静态定义它并使用CLI进行部署。如果对于日期部分的各种组合确实需要不同的功能,听起来您将最终为每个可能的组合创建一个新功能,或者只是决定使用单个函数对每次组合进行每次处理。