【发布时间】:2017-08-15 06:00:45
【问题描述】:
我有一个像 instagram 这样的应用程序。它有反馈页面。
当用户喜欢某个帖子时,我会添加这个赞和反馈(用它自己的密钥 (.childByAutoId) 给这个赞。
static func add(_ newLike: LikeItem) {
// add like id for user feedback implementation
var like = newLike
let likeRef = ref.child("/userslikes/" + newLike.userId + "/onposts/" + newLike.postId).childByAutoId()
like.key = likeRef.key
var updates: [String: Any?] = [
"/userslikes/" + like.userId + "/onposts/" + like.postId: like.toAnyObject(),
"/postslikes/" + like.postId + "/" + like.userId: like.toAnyObject()
]
if like.userId != like.postAddedByUserId { // dont add your own likes
var likeForFeedBack = like.toAnyObject()
likeForFeedBack["isViewed"] = false // when user will open feedback -> true
updates.updateValue(likeForFeedBack, forKey: "/feedback/" + like.postAddedByUserId + "/" + like.key)
}
ref.updateChildValues(updates)
}
没关系。而且我还有remove 功能。它会喜欢节点,从这个喜欢中得到这个喜欢和feedbackId。然后我进行多部分更新。
static func remove(with userId: String, _ post: PostItem) {
var updates: [String: Any?] = [
"/userslikes/" + userId + "/onposts/" + post.key: nil,
"/postslikes/" + post.key + "/" + userId: nil
]
// deleting from feedback node
getLikeFromUser(id: userId, postId: post.key) { like in
if like.userId != like.postAddedByUserId {
updates.updateValue(nil, forKey: "/feedback/" + like.postAddedByUserId + "/" + like.key)
}
ref.updateChildValues(updates)
}
}
static func getLikeFromUser(id: String, postId: String,
completion: @escaping (_ likeId: LikeItem) -> Void) {
let refToLike = ref.child("/userslikes/" + id + "/onposts/" + postId)
refToLike.observeSingleEvent(of: .value, with: { snapshot in
let like = LikeItem(snapshot: snapshot)
completion(like)
})
}
所以,当用户点击“删除喜欢”时,我有一些延迟(此时它正在获取类似实体以获取反馈 id)。
问题:如果我向like-removeLike 按钮发送垃圾邮件(如 - 删除 - l - rl - l - rl 等),有时我的反馈节点会重复(使用不同的键ofc。它没有删除旧节点),有时它没有添加(在这种情况下,如果我将来尝试删除它,它会崩溃)。
如何解决?
【问题讨论】:
-
我的拙见,首先这可以通过用户体验限制来解决。用户不应向应用程序中的任何按钮发送垃圾邮件。必须是此事件之间的延迟。即使你可以添加一些最大值。在用户决定之间切换......等待一段时间,让它再次免费(也许)。如果我理解正确的话。
-
@gyer 那么,如果我将阻止按钮,直到以前的数据将被写入数据库,可以解决吗?你也可以写答案。如果没有更多答案,我可以接受。谢谢
标签: ios swift firebase firebase-realtime-database user-experience