我有两个参考,例如:
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。
该问题的解决方法是什么?
答案 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的完整代码(即总体逻辑,触发器类型,最后返回什么等等)的情况下,很难给出建议。