You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何等待两个Firebase Functions的OnCreate触发器执行完成后触发通知

解决方案

核心问题说明

你目前的写法不符合Cloud Functions for Firebase的运行规则:所有触发器必须在部署阶段静态声明,不支持在一个触发器的运行过程中动态注册新的触发器,因此你写在newProveedorAdd内部的第二个onCreate逻辑完全不会生效,自然也不会有对应的日志输出。

正确实现方案

你只需要拆分为两个独立的静态触发器即可,Firebase的路径通配符天然支持匹配任意符合规则的文档路径:

  1. 第一个触发器监听Proveedores集合的文档创建事件,处理供应商新增的相关逻辑
  2. 第二个触发器直接静态声明监听所有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:54:04