javascript Firebase函数实时数据库触发器工作不正常

xtupzzrd  于 2022-12-17  发布在  Java
关注(0)|答案(2)|浏览(122)

我尝试发送通知每次新用户注册,我的当前代码(省略不必要的代码的问题):

const functions = require("firebase-functions");

const admin = require("firebase-admin");
admin.initializeApp();

const doctorRef = functions.database.ref("/doctors/{pushId}/doctor_Data");

exports.newDoctorNotification = doctorRef
    .onCreate((snapshot, context) => {
      const newDoctorID = context.params.pushId;
      console.log("val: " + snapshot.val());
      console.log("key: " + snapshot.key);
      
      .
      .
      
      return true;
    });

和我当前数据库:

由于某种原因,当我添加一个新节点时,函数根本没有被调用!但是当我试图在整个Google Cloud控制台功能测试中测试它时,值出来为null,键是“doctor”,context.params.pushId是“undefined”。
控制台输出:

xzv2uavs

xzv2uavs1#

如果您要添加新的医生,那么我很确定doctorRef应该如下所示:const doctorRef = functions.database.ref("/doctors/{pushId}");
然后onCreate将检测新的医生节点。
在当前代码中,您正在监听对doctor数据属性的添加。

iezvtpos

iezvtpos2#

如果在函数的某些代码路径中没有要执行的异步工作,则可以只返回null
以下是文档1中的原因之一,事件驱动函数无法完成的原因
当用Node.js编写的函数返回一个被拒绝的承诺或传递一个非空值给回调函数时,默认情况下函数停止执行,事件被丢弃。
根据Documentation2,您还需要终止后台函数并返回空值或使用另一个promise方法。
函数返回时,云函数会将事件驱动的函数执行视为已完成。如果函数创建后台任务(如线程、future、JavaScript Promise对象、回调或系统进程),则必须终止或以其他方式解决这些任务,然后才能从函数返回。在函数返回之前未终止的任何任务都可能无法完成,并可能导致未定义的行为。
有关更多信息,您可以参考这些thread1和thread2,它们可能会对您有所帮助。

相关问题