【发布时间】:2020-05-27 03:29:51
【问题描述】:
根据我对Transactions的理解,它可以返回null有两个原因:
- 在执行事务的节点上实际上没有任何值。
- 本地缓存为空,因为 Firebase Cloud Functions 是无状态的。因此,它可能会在第一次返回
null并重新运行该函数。
我的问题是,我们如何区分这两种情况?还是 firebase 自己做区分?
Myref.transaction(function(currentData) {
if(currentData != null) {
return currentData + 1;
} else {
console.log("Got null")
return;
}
}, function(error, committed, snapshot) {
if(!committed) {
// The transaction returned null.
// But don't know if it's because the node is null or
// because the transaction failed during the first iteration.
}
});
在上面的例子中,当Myref 的值不存在时,事务回调将被传递null,和,当它第一次尝试获取数据时执行交易。
如果Myref 的值实际上是空的,我希望在此处填写数字1238484。如果不是,并且null实际上是由于事务读取错误而被抛出,我该如何区分?
PS:请不要在节点上建议监听器。还有其他更有效的方法吗?
【问题讨论】:
-
您试图通过交易解决的具体问题是什么?
-
这是为了更好地理解交易。我现在已经简化了这个例子。使用我编写的代码,如果节点上没有值,我希望事务中止。但问题是,由于交易本身的性质,即使节点上有值,它也会被中止。
-
您是否正在验证 node.exists() 返回 true,因为这将帮助您确定节点是否存在,因此您不会在空位置调用它。
-
在我的 PS 中,除了检查 node.exists() 之外,我还要求提供其他方法。
标签: firebase firebase-realtime-database google-cloud-functions