firebase - 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 。
这个问题应该怎么解决?
解决方案
如果您想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 的完整代码(即整体逻辑、触发器类型、它最后返回什么等),很难就如何做到这一点给出建议。
推荐阅读
- python - 如何扫描字符串中的字符以标记匹配是否正确
- python - python:瑞利拟合(直方图)
- r - 使用 lapply() 在 R 中生成 igraph 属性
- sql - 在Oracle中将一列的数据显示为一行
- templates - 如何将调度程序和触发器添加到 Azure devops 管道中的嵌套模板?
- javascript - 如何在 VueJS 中来回传递数据
- javascript - 拒绝显示...在一个框架中,因为它在 React 和 oAuth 中将“X-Frame-Options”设置为“同源”
- powershell - 可重用的自定义排序
- nginx - Nginx 配置将任何 url 作为根 url 提供服务
- kubernetes - 将节点添加到 kubernetes 集群会导致无法加载 Kubelet 配置文件 /var/lib/kubelet/config.yaml 并且在 /etc/cni/net.d 中找不到网络