You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase数据库累加值失败求助:刷新后数值恢复默认值

解决Firebase数据库值累加失效问题

你的代码问题在于直接赋值而非原子累加,导致无法正确更新数值,甚至覆盖为旧值/默认值。以下是修复方案:

核心问题分析

当前代码中countTrains: + countTrain是直接将字段设置为countTrain的数值,而非在现有值基础上累加。如果countTrain不是从数据库实时获取的最新值,更新操作就会覆盖掉数据库里的当前值,刷新后自然回到默认状态。

正确实现方式(原子累加)

使用Firebase提供的原子递增操作,确保无论并发情况如何,都能安全地在现有值基础上累加:

模块化API(Firebase v9+)

// 先导入increment函数
import { increment } from "firebase/database";

// 更新代码
update(ref(db, 'users/' + user.localId), {       
  countTrains: increment(1) // 这里替换为你需要累加的数值,比如1
}).then(() => {
  console.log('Обновление бд');    
})  
.catch((error) => {
  alert(error);
});

命名空间API(旧版)

如果使用的是旧版Firebase SDK,改用ServerValue.increment:

update(ref(db, 'users/' + user.localId), {       
  countTrains: firebase.database.ServerValue.increment(1)
}).then(() => {
  console.log('Обновление бд');    
})  
.catch((error) => {
  alert(error);
});

额外说明

  • 原子操作无需手动读取当前值,Firebase会在服务器端完成累加,避免并发更新冲突。
  • 如果需要累加动态数值(比如不是固定加1),同样可以将数值传入increment(),例如increment(countTrain)(前提是countTrain是你要累加的增量,而非当前数据库的值)。

内容的提问来源于stack exchange,提问作者Proger228

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:45:39