我在下面有firebase事务,它将在all
对象内的year
和stat
字段中递增。但是,如果stat
甚至不存在,firebase会自动为我创建该对象吗?
根据我的测试,我得到一个错误,提示TypeError: Cannot read property 'all' of null
显然表明stat
为空。如果是这样,如何使用事务创建对象(如果以前不存在)?
const merchantRef = admin.database().ref("statistics/" + merchantId);
merchantRef.transaction(stat => {
stat.all = (parseInt(stat.all) || 0) + price;
stat.year = (parseInt(stat.year) || 0) + price;
return stat;
});
答案 0 :(得分:1)
您可以通过检查stat
是否为null
来检查该位置是否有数据。
const merchantRef = admin.database().ref("statistics/" + merchantId);
merchantRef.transaction(stat => {
if (!stat) stat = { all: 0, year: 0 };
stat.all += price;
stat.year += price;
return stat;
});
答案 1 :(得分:1)
您可以在不存在的位置进行交易。即使它确实存在,您也应该期望对处理程序函数的第一次调用将为您提供null,并且您将需要返回该位置应该的数据。
由于您的更新函数被多次调用,因此它必须能够 处理空数据。即使您的遥控器中已有数据 数据库,事务处理功能时可能未在本地缓存它 运行,则初始值为null。