如何等待两个Firebase Functions的OnCreate触发器执行完成后触发通知
解决方案
核心问题说明
你目前的写法不符合Cloud Functions for Firebase的运行规则:所有触发器必须在部署阶段静态声明,不支持在一个触发器的运行过程中动态注册新的触发器,因此你写在newProveedorAdd内部的第二个onCreate逻辑完全不会生效,自然也不会有对应的日志输出。
正确实现方案
你只需要拆分为两个独立的静态触发器即可,Firebase的路径通配符天然支持匹配任意符合规则的文档路径:
- 第一个触发器监听
Proveedores集合的文档创建事件,处理供应商新增的相关逻辑 - 第二个触发器直接静态声明监听所有
comida/{proveedorID}/Pedidos/{pedidoID}路径的文档创建事件,触发后可以通过通配符拿到的proveedorID去查询Proveedores集合对应的供应商信息,再执行你需要的业务逻辑
示例代码
// 引入Firebase Admin模块(如果还没引入的话) import * as admin from 'firebase-admin'; admin.initializeApp(); // 第一个触发器:处理Proveedores新增逻辑 export const newProveedorAdd = functions.firestore .document("Proveedores/{proveedorID}") .onCreate(async (snapshot) => { const idProveedor = snapshot.id; const infoProveedor = snapshot.data(); if (infoProveedor) { const RUC = infoProveedor.RUC; console.log("Proveedor nuevo id: " + idProveedor + " RUC: " + RUC); // 这里写你需要的供应商新增后续逻辑 } return null; }); // 第二个触发器:静态监听所有Pedidos子集合的新增事件 export const newPedidoAdd = functions.firestore .document("comida/{proveedorID}/Pedidos/{pedidoID}") .onCreate(async (snapshot, context) => { // 从通配符中获取对应的供应商ID和订单ID const { proveedorID, pedidoID } = context.params; console.log("ENTRO 2 " + pedidoID + " 对应供应商ID:" + proveedorID); // 如果需要用到供应商的信息,直接查询Proveedores集合对应文档即可 const proveedorDoc = await admin.firestore().collection("Proveedores").doc(proveedorID).get(); if (proveedorDoc.exists) { const infoProveedor = proveedorDoc.data(); const RUC = infoProveedor.RUC; // 这里写你需要的订单新增后续逻辑 } return null; });
注意事项
两个触发器独立运行,不需要互相等待,当Proveedores文档创建完成后,只要后续对应路径下有Pedidos文档新增,第二个触发器就会自动触发。
内容的提问来源于stack exchange,提问作者PartnerTech
相关产品推荐
相关产品推荐

