如何等待两个 OnCreate Firebase 函数完成

How to wait two OnCreate Firebase Functions finished

我想等到第二个 OnCreate 完成触发通知。问题是第二个 OnCreate 取决于第一个 OnCreate 文档。 因为在“Proveedores”中创建之前,我不知道“comida”中的文档 ID。这是我的数据库:

我想在从“comida”中的文档 ID 创建位于“Pedidos”的新文档时触发。

这是我尝试过的:

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);
        console.log("Ruta doc: "+"comida/"+idProveedor+"{proveedoID}/Pedidos/{pedidoID}");
        await functions.firestore
            .document("comida/"+idProveedor+"/Pedidos/{pedidoID}")
            .onCreate((snapshot) => {
              const numPedido = snapshot.id;
              console.log("ENTRO 2 " + numPedido);
              return Promise;
            });
      }
    });

这也是来自 Firebase Functions 的控制台。好像不是在等第二个OnCreate完成

您正在触发的 Cloud Function 代码中使用 Cloud Firestore onCreate() 触发器,这将不起作用。因为 Cloud Firestore events 旨在用于 Cloud Functions,它只会监听 functions.firestore 的导出对象。一个 Cloud Function 也可以监听一个触发器。因此,对于多个触发器,必须使用多个 Cloud Functions。

在您的例子中,您有一个 Proveedores 集合和一个 comida 集合。您希望在创建 Proveedores 集合中的文档时触发 Cloud Functions。现在,您还希望在 Pedidos 子集合中创建文档时发送通知,该子集合位于文档 ID 与之前创建的 Proveedores 集合中文档的文档 ID 相同的文档中。

要实现以上内容,我建议您使用两个 Cloud Functions。

Function-1 在 Proveedores 集合中创建文档时触发。在此函数内,您可以在 Pedidos 子集合内创建一个空文档,该子集合位于文档内,其文档 ID 与在 comida 集合中的 Proveedores 集合中创建的文档相同。创建文档时,它将触发 Function-2,因为它被创建为监听 comida/{comidaID}/Pedidos/{pedidosID} 上的 onCreate() 事件,其中可以实现发送通知的逻辑。

函数:1

const admin = require("firebase-admin");
const functions = require("firebase-functions");
admin.initializeApp();
const db=admin.firestore();
exports.newFunction = functions.firestore.
   document("Proveedores/{proveedorID}").onCreate((snapshot)=>{
     const idProveedor = snapshot.id;
     const infoProveedor = snapshot.data();
     if (infoProveedor) {
       const name = infoProveedor.name;
       console.log("Proveedor nuevo id: " +idProveedor + " Name: " + name);
       db.collection("comida").doc(idProveedor).
           collection("Pedidos").doc().set({});
     }
   });

函数:2

const admin = require("firebase-admin");
const functions = require("firebase-functions");
admin.initializeApp();
// const db=admin.firestore();
exports.newFunction = functions.firestore.
   document("comida/{comidaID}/Pedidos/{pedidosID}").onCreate((snapshot)=>{
     const idPedidos = snapshot.id;
     console.log("The document has been created with document Id: "+idPedidos);
    // implement logic to send notifications here
   });