Firebase云功能会阻止观察者从另一个功能

问题描述 投票:0回答:1

第一个功能观察任何过程。但是,如果第一个函数不发送任何响应,我想根据第二个函数手动停止观察者。当我调用第二个函数时,观察者不会在第一个函数中停止。我该如何处理这种情况?

exports.startObserverFunc = functions.https.onRequest((req,res) => {
            var userFirebaseID = req.query.firebaseID;
            var ref = admin.database().ref("Quickplay");
            let callback = ref.child(userFirebaseID).on("value",function(snapshot){
              if (snapshot.exists()){
                // Some Codes
                ref.child(userFirebaseID).off("value", callback); 
                res.status(200).send({
                  resultName: "ok"
                });

              }
            });

          });

exports.stopObserverFunc = functions.https.onRequest((req,res) => {

            var userFirebaseID = req.query.firebaseID;
            var ref = admin.database().ref("Quickplay");
            ref.child(userFirebaseID).off("value");  
            res.status(200).send({
              resultName: "ok"  
            });

          });
firebase firebase-realtime-database google-cloud-functions
1个回答
1
投票

你应该避免在云函数中使用这样的观察者/听众。考虑到您的代码可以基于函数的负载在任意数量的服务器实例上运行,它可能无法执行您想要的操作。此外,两个函数调用肯定不会在相同的服务器实例上运行,因此它们彼此不了解。

几乎可以肯定的是,您只想使用once()一次查询单个对象,并在响应中使用它。这就是所有official samples所做的。

© www.soinside.com 2019 - 2024. All rights reserved.