【发布时间】:2019-02-01 19:30:56
【问题描述】:
我有以下问题:
交易更新功能问题:
尝试减少存储在实时数据库路径中的当前值。 我尝试以与我在许多关于increase的答案中看到的类似方式处理当前值为空时调用的第一次事务。 例如增加阅读次数等。
在所有示例中都以类似的方式显示:
return (current || 0) + 1;
但在我的情况下,只有当当前值大于参数时,我才需要减小某个值。 多个用户可能会尝试减少相同的值,因此我需要在事务中执行此操作。 这是我的代码:
seatsCountRef.transaction((current)=>{
if ((current || 0) >= 1) {
return (current || 0) - 1;
}
})
但减少永远不会成功。所以这是我在第 1 点中的主要问题。
我在第 1 点中的另一个问题是:根据文档,如果我不返回任何内容,则交易被中止。
我也试试这个方法:
...
else {
return; // abort the transaction
}
但在这两种情况下,我都收到了部署警告。有什么提示吗?
==== 我已经切断了另一部分,因为正如 Frank van Puffelen 所说,这是一个单独的问题 ===
所以现在这是一个没有外部依赖的简单问题。
我只是想知道减少交易的正确方法是什么。
因为所有的例子和教程都是关于增加的,更新功能很简单
return (current || 0) + 1;
但是当我尝试这样做时
if ((current || 0) >= 1) {
return (current || 0) - 1;
}
交易永远不会成功。
【问题讨论】:
-
您在这篇文章中有两个不同的问题。请将每个帖子限制为一个问题,并在每个帖子中尽最大努力create a minimal complete verifiable reproduction。例如,第二个 sn-p 看起来非常复杂,我们仍然看不到
data是什么以及它来自哪里。尝试创建一段没有外部依赖关系的代码,并包含它操作的 JSON(作为文本,请不要截图)。 -
对不起,我的错。我已经编辑了帖子,以便不包含数据和外部依赖项。我已经在它试图操纵的 db 中添加了 json。
-
您希望
return new Error('Failure', error);做什么?此时事务已经完成,因此您无法再以原子方式更改数据库。 -
好的,我已经切断了第二个问题。我需要关于基本的建议 - 减少交易。我已经更新了帖子。
标签: javascript firebase firebase-realtime-database transactions