【问题标题】:How to guarantee that the latest write does not get overwritten by a previous write如何保证最新的写入不会被先前的写入覆盖
【发布时间】:2018-11-21 00:35:14
【问题描述】:

我遇到了 Firebase 写入乱序的问题。

我有一个将数据写入文档的函数。对象改变状态,然后调用函数将状态写入 Firebase。

function saveStateToFirebase(currentState: any): void{ 
    admin.firestore().doc(`id`).set(currentState);
}

//... application calls these functions with calculated objects called state

saveStateToFirebase(state0);
saveStateToFirebase(state1);

文档数据应设置为 state1,但是,有时(我猜是由于赛车网络条件)文档数据有可能设置为 state0 .

如何解决较早写入覆盖较晚写入的问题? RxJS 有没有优雅的解决方案?我阅读了 Firestore 交易的文档,但不确定它是否适用于此。因为我没有根据前一个字段同时更新数据库中的字段。我只关心我的软件的最新状态。

【问题讨论】:

  • 您的状态是存储为字符串还是整数?如果它们是数字,则很容易编写一个事务,该事务只有在新数据大于旧数据时才会完成。

标签: node.js typescript firebase google-cloud-firestore


【解决方案1】:

我宁愿发表评论,但不能。但是你能有 2 个 observables,一个用于数据流,另一个是 db 的锁定状态吗?

然后 write 函数中的 combineLatest 将在进行 db 操作之前查询这两个资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 2016-04-11
    • 2017-09-25
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多