【发布时间】:2020-06-10 13:30:45
【问题描述】:
我非常密切地按照教程进行操作,并且正在测试交易中的“点赞”功能。但是,当我用 2 台设备对其进行测试时,计数似乎并没有得到很好的支持。
错误是当我在两台设备上单击like-button 时,计数器有时会上升两倍,但那是计数器上升然后下降使其增加 0 的时间(实际上有两个喜欢的按钮)。当同时按下两个不喜欢的按钮时也会出现类似的问题。
不喜欢两个按钮(同时)也可能导致计数器增加两个而不是......当它应该减少两个时。
var liked; // global variable to check if button has been liked
document.getElementById("like-button").onclick = function () {
console.log("click");
database.ref("brands/" + brand + "/" + dealId).transaction(function(post) {
console.log("post:" , post);
if (post) {
if (post.likes && liked) {
post.likes--;
liked = false;
}
else {
post.likes++;
liked = true;
}
}
return post;
});
}
考虑到我非常密切地关注了这笔交易,我想知道这里有什么问题。 https://firebase.google.com/docs/database/web/read-and-write
编辑:我有 JSON
Brand3
Brand3ID
impressions: 0
likes: 16
views: 0
更新:当我在 2 个设备上同时单击按钮时,我注意到 post 记录了 3 次 - 这可能解释了处理全局标志失败的原因,但我仍然无法解决原因。通常post 应该只记录两次,一次为空,一次为检测到post (Firebase realtime database transaction handler gets called twice most of the time)
【问题讨论】:
-
您共享的代码乍一看还不错。您如何看待这个问题?
-
我正在查看我的实时数据库中点赞数的变化,并在两个不同的设备上点击了点赞按钮
-
我确实注意到了一个问题 - 在点击两个设备(几次)后,全局
liked标志似乎甚至对于一个设备来说都搞砸了 - “喜欢”会导致计数 -
会不会是事务失败时没有处理
liked全局标志? -
很难说出了什么问题,因为代码看起来不错。你能:1)编辑你的问题以在
/brands/$brand/$dealId包含JSON(作为文本,没有截图)。您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。 2)看看你是否可以在像jsbin这样的网站上设置一个最小的问题重现?
标签: javascript firebase firebase-realtime-database