Javascript Firebase-针对脱机情况设置vs更新?
我有一个评论屏幕,底部有一个评论列表和一个文本框。我有两种使用更新的评论计数保存评论的方法: 1)使用set() 2)使用update() 现在,对于脱机情况,即当客户端与internet断开连接时,如果我在脱机时添加多个注释,以下是两种情况下的情况: set()工作正常。当客户端返回到联机模式时,用户在脱机时添加的所有注释将保存到firebase数据库 但是update()在脱机时似乎不起作用。当客户端返回联机模式时,“计数”值不正确,只有一个键添加到firebase数据库的“commentsList”节点 我想使用update()而不是set(),但是update()在脱机模式下似乎不起作用。那么,我应该坚持使用set(),因为我需要实现脱机功能,还是有更好的方法?从技术上讲,Javascript Firebase-针对脱机情况设置vs更新?,javascript,firebase,react-native,firebase-realtime-database,Javascript,Firebase,React Native,Firebase Realtime Database,我有一个评论屏幕,底部有一个评论列表和一个文本框。我有两种使用更新的评论计数保存评论的方法: 1)使用set() 2)使用update() 现在,对于脱机情况,即当客户端与internet断开连接时,如果我在脱机时添加多个注释,以下是两种情况下的情况: set()工作正常。当客户端返回到联机模式时,用户在脱机时添加的所有注释将保存到firebase数据库 但是update()在脱机时似乎不起作用。当客户端返回联机模式时,“计数”值不正确,只有一个键添加到firebase数据库的“comments
update()
方法工作正常。它只是没有做你想让它做的事。:-)
离线场景中现在发生的情况是:
commentscount
中的更改与操作的实际注释中的更改相匹配时,才允许客户端发送更新。这相当复杂,但有一个优点,即当客户端脱机时,它可以工作。在上面的场景中,结果将是服务器拒绝写入,然后您的客户端可以从步骤2重试(在使用服务器的正确值更新注释计数之后)。如果您想研究这条路径,它与我在这里的回答中演示的类似:增加计数器的唯一安全方法是使用事务,事务仅在联机时才起作用。您最好对数据库进行安全写入,指示计数应该增加,然后使用云函数在后端安全地处理。我以前使用过事务,但我想利用Firebase的脱机模式。因此,首先我使用“value”(一次)获取当前计数,然后更新计数。谢谢@Frank!所以,如果我坚持使用“set”(因为我需要离线功能),这会导致任何问题,或者违反firebase的最佳实践吗?set()现在似乎工作正常。如果多个用户同时发帖,您的实际评论数和计数器将不同步,当他们脱机时,这种情况更可能发生。
ref.child(commentsList).child(commentKey).set(true);
ref.child(commentsCount).set(++count);
allCommentKeysArray[newCommentsKey] == true
var data = {
commentscount: ++count,
commentslist: { ...allCommentKeysArray}
}
ref.child(path).update(data);