Firebase函数-无法捕获来自无效引用的值

时间:2018-11-16 05:19:44

标签: firebase firebase-realtime-database google-cloud-functions

我有两个参考,例如:

  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。

该问题的解决方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您想在代码中发现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的完整代码(即总体逻辑,触发器类型,最后返回什么等等)的情况下,很难给出建议。