我想如何更新firebase节点。 例如,如果我正在构建测验应用程序并想知道当前用户如何快速回答正确答案。
节点就像这样
"correct answer": {
"user1Id": "date",
"user2Id": "date",
"user3Id": "date",
"user4Id": "date"
}
节点会按时间顺序或其他标准更新吗? 如果我想知道用户2有哪个地方,我应该检索日期并进行比较吗?或者只是迭代,如果与user2Id匹配,那么停止迭代? 提前谢谢!
答案 0 :(得分:1)
显然,比较响应时间会更简单,但是,可能有一个布尔值阻止其他用户在响应任何响应时做出响应。提示,使用FireStore!
答案 1 :(得分:1)
有很多原因导致该对象中的键值对不会按照它们的设置顺序排序,包括不保证javascript对象的属性顺序。如果它们是由客户生成的,那么在应用服务器上,在网络上加上非确定性,并且您可以确定您应该对订单不确定。
更好的表现形式imo就像:
"correct answer": {
userId: { presentedAt:"client time in UTC", answeredAt:"client time in UTC" },
otherUserId: ...
}
然后确定胜利者是按照表达和回答之间的间隔进行排序的问题。
let _ = require loadash or underscore
let sortedUserIds = _.sortBy(Object.keys(answerObject), key => {
let times = answerObject[key];
return times.answeredAt.getTime() - times.presentedAt.getTime();
});
// the first object in sortedUserIds is the winner, second is runner-up, etc.
我不知道你的游戏,但我认为这种方法对用户来说最“公平”。