两个同时读取的请求结果是否彼此一致?

时间:2019-06-18 02:20:23

标签: firebase google-cloud-firestore google-cloud-functions

假设我有一个Firestore云功能,它将在一笔交易中增加一个基地和一个玩家。

下面的代码会总是给我和玩家一样的数量吗?

const db = firebase.firestore();
const basesPromise = db.collection("bases").get();
const playersPromise = db.collection("players").get();
Promise.all([basesPromise, playersPromise])
    .then(([bases, players]) => {
      console.log("Bases:", bases);
      console.log("Players:", players);
    });

更笼统地说,我想知道当我同时发出两个请求时,我从他们那里得到的结果是否彼此一致。

这些请求是否同时到达服务器并返回彼此一致的数据?

谢谢你!

1 个答案:

答案 0 :(得分:2)

Cloud Firestore不提供保证,因为任何两次读取将始终产生相同的值。它们之间总是有可能通过事务来改变某些事情。在您的代码中,这两个查询实际上不是“同时”发生的。实际上,在最好的情况下,来自客户端的请求实际上是通过单个连接进行的。

您获得的唯一保证是,对单个事务或批处理写入进行的某些文档修改都将自动进行。永远不会有部分完成的交易或批处理。