Firebase事务在路径上读取null,即使该路径上有数据



我知道firebase事务有时会将数据读取为null,但随后循环会再次运行,直到从服务器获得值并提交为止。然而,我面临着一种独特的情况,即事务读取null数据并提交在null情况下返回的值。请看一下随附的代码。

deductTransaction.transaction((current_value) => {
if (current_value != null) {
return current_value - cost;
}
return 25;
});

在上述代码中;扣除交易";是我想要更新的数据(编号(的路径

上述代码在某些情况下运行良好,即循环在读取null的情况下再次运行,有时只运行一次,即使在该路径上有一些数据,也会将值读取为null,然后提交25,从而破坏原始数据

p.S.:我快要拔头发了,所以如果有任何帮助,将不胜感激

当您在某个位置运行事务时,回调/处理程序会立即调用,其中包含客户端对该位置值的当前猜测。大多数情况下,当前值的这个初始猜测将是null

您的处理程序需要处理这种情况。那么:假设该地点没有数据,而你想扣除成本,会发生什么?通常,您要么返回-25,要么通知事务中止。

无论哪种方式:初始猜测和新值都将被发送到数据库服务器,然后数据库服务器检测到初始猜测是错误的,并将当前值返回给调用者。然后,SDK再次调用您的处理程序/回调,并对当前值进行最佳猜测(希望不会正确(。

另请参阅:

  • Firebase实时数据库事务处理程序在大多数情况下被调用两次(带有上面流程的图表(
  • Firebase runTransaction不工作-MutableData为null
  • 理解firebase中的冲突解决
  • 为什么我的Firebase事务中的currentData总是为零

注意:现在可以使用increment运算符在没有事务的情况下执行递增和递减操作。这将大大简化您的代码,并且性能更好,如Firebase实时数据库上原子递增值的速度有多快?所示?。

用于比较:如果该位置不存在值,则increment运算符假定当前值为0

最新更新