首页 > 解决方案 > Firebase 函数 - 从未捕获的无效引用中获取价值

问题描述

我有两个参考,例如:

  var receiverMaleRef = admin.database().ref(`root/users/male/${currentUser}`);
  var receiverFemaleRef = admin.database().ref(`root/users/female/${currentUser}`);

'currentUser'总体上是唯一的,即两个节点上不能存在相同的名称。

我正在使用以下代码来获取值:

return receiverMaleRef.once('value').then(function(maleDataSnapshot) { 

})
.catch(err => {

   //if currentUser is not male catch should be called because of invalid reference
   //Get value from female node   
   return receiverFemaleRef.once('value').then(function(dataSnapshot) { 

   })

});

我面临的问题是,如果'currentUser'是女性,它不会捕获错误,而是在maleDataSnapshot中返回 null 。

这个问题应该怎么解决?

标签: firebasefirebase-realtime-databasegoogle-cloud-functions

解决方案


如果您想maleDataSnapshot用您的代码捕捉 null (即不存在)的事实,您可以使用该exists()方法并执行以下操作:

return receiverMaleRef.once('value').then(function(maleDataSnapshot) { 
   if (!maleDataSnapshot.exists()) {
       throw new Error('currentUser is not male');
   }
})
.catch(err => {

   //if currentUser is not male catch should be called because of invalid reference
   //Get value from female node   
   return receiverFemaleRef.once('value').then(function(dataSnapshot) { 

   })

});

但是,实际上并不建议使用错误捕获来实现您的业务逻辑。您可以使用 if/then/else 重构您的 Cloud Function 代码。如果没有看到 Cloud Function 的完整代码(即整体逻辑、触发器类型、它最后返回什么等),很难就如何做到这一点给出建议。


推荐阅读