我尝试发送通知每次新用户注册,我的当前代码(省略不必要的代码的问题):
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”。
控制台输出:
的
2条答案
按热度按时间xzv2uavs1#
如果您要添加新的医生,那么我很确定
doctorRef
应该如下所示:const doctorRef = functions.database.ref("/doctors/{pushId}");
然后
onCreate
将检测新的医生节点。在当前代码中,您正在监听对doctor数据属性的添加。
iezvtpos2#
如果在函数的某些代码路径中没有要执行的异步工作,则可以只返回
null
。以下是文档1中的原因之一,事件驱动函数无法完成的原因
当用Node.js编写的函数返回一个被拒绝的承诺或传递一个非空值给回调函数时,默认情况下函数停止执行,事件被丢弃。
根据Documentation2,您还需要终止后台函数并返回空值或使用另一个promise方法。
函数返回时,云函数会将事件驱动的函数执行视为已完成。如果函数创建后台任务(如线程、future、JavaScript Promise对象、回调或系统进程),则必须终止或以其他方式解决这些任务,然后才能从函数返回。在函数返回之前未终止的任何任务都可能无法完成,并可能导致未定义的行为。
有关更多信息,您可以参考这些thread1和thread2,它们可能会对您有所帮助。