首页 > 解决方案 > 在firebase云函数中调用admin.initializeApp()结束时是否需要调用app.delete()

问题描述

我正在编写一个云函数,其中我在 for 循环中使用新名称创建或初始化 firebase 应用程序,我的问题是,是否有必要在每个实例上调用 app.delete() 函数?

 snapshot.forEach(doc => {
    counter++;
    // console.log(counter," in first");
    // console.log(doc.id, " is the doc ID");
    var home = doc.get('home');//e.g: hyperoffice 
    var switches = doc.get('switches');
    var action = doc.get('action');//ON or OFF
    var repeat=doc.get('repeat');// true or false

    try {
      // console.log("home ", home, " switches ", switches);
      let defapp = admin.initializeApp({ databaseURL: databaseUrl }, `${home}${counter}`);
      var databaseUrl = `https://${home}.firebaseio.com/`;
      switches.forEach(s => {
        let dbRef = admin.database(defapp).ref(`Controls/${s}`);
        dbRef.once("value").then(val => {
          var data = val.val();
          //   console.log("this is data", data);
          var payload_on = data.payload_on;
          var payload_off = data.payload_off;
          let valRef = admin.database(defapp).ref(`Controls/${s}/value`);
          if (action === "ON") {
            // on the device
            return valRef.set(payload_on);
          }
          else if (action === "OFF") {
            //off the device
            return valRef.set(payload_off);

          } else {
            console.log("Undefined action field in firestore");

          }
          return null;
        }).catch(err => {
          console.log("Error", err);
        });
      });
    } catch (error) {
      console.log("Eroor: ", error);
    }
    finally {
      console.log("in finally block 67");

    }
  });

标签: javascriptnode.jsfirebasegoogle-cloud-functionsfirebase-admin

解决方案


严格来说,您不必这样做,但是随着时间的推移您会泄漏大量内存,并且您的函数可能会在将来的调用中崩溃。您的函数应始终在终止之前清理未使用的内存。这意味着您应该删除所有已初始化的应用程序,除非您想在将来的调用中使用完全相同的应用程序实例。


推荐阅读