【问题标题】:Cloud Function with Schedule带计划的云功能
【发布时间】:2019-11-12 17:40:09
【问题描述】:

我正在尝试通过添加一个计划来更改 firebase 内节点的状态,即 {active: true} 到 {active: false} 来实现云功能

const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();

exports.createPrd = functions.firestore.document('products/{itemId}').onCreate((ev) => {   
    db.collection('products').doc(ev.id).get().then( doc => {
        var dia = doc.data().limitDay;
        var mes = doc.data().limitMonth;
        var hora = doc.data().limitHour;         
        exports.schedulerFun = functions.pubsub.schedule(dia+" "+mes+" "+hora).onRun((context) => {
            console.log('Se acabo la buena onda', doc.data().productName)
            db.collection('products').doc(ev.id).update({
                activo: false
            })
        })     
        return 0;
    }).catch(err => {console.log(err)});          

});

这是我考虑过的代码,我在哪里传递了我从 firebase 获取的参数以激活计划,但 firebase 在通过 onCreate 激活函数时返回此错误。

  • 函数返回未定义、预期的 Promise 或值

【问题讨论】:

  • Doug 在下面解决了您的核心问题,但请注意,您在这里收到的错误消息是因为您没有在顶层返回承诺(您可能需要注意当你按照道格建议的方式重写时)。你需要做return db.collection(..... 而不仅仅是db.collection(....。阅读有关promises in cloud functions 的更多信息——如果您不这样做,执行环境可能会提前停止您的函数。

标签: javascript firebase google-cloud-functions


【解决方案1】:

您尝试做的事情是不可能的。您不能在另一个函数声明中声明和导出函数。如果您想按计划运行某些内容,则必须在文件的顶层声明并导出它。

您可以做的是让您的函数按计划运行,但查询 Firestore 以查看它应该如何在每次调用时运行。

【讨论】:

猜你喜欢
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
相关资源
最近更新 更多