【发布时间】:2018-05-19 17:27:49
【问题描述】:
我正在尝试使用可变数量的读取操作来运行事务。 我把read()操作放在update()之前。
阅读 https://cloud.google.com/firestore/docs/manage-data/transactions 上的 Firestore 文档
“一个事务由任意数量的 get() 操作和任意数量的写操作组成,例如 set()、update() 或 delete()”
和
使用事务时,请注意:
- 读操作必须先于写操作。
- 如果当前编辑影响了一个文档,调用事务的函数(事务函数)可能会运行多次 事务读取。
- 事务函数不应直接修改应用程序状态。
但没有提供实现。 当我尝试运行下面的代码时,我发现事务函数运行了更多时间,然后我得到了一个异常。 但如果我只尝试一个,一切都会好起来的。
const reservationCol = this.db.firestore.collection('reservations');
return this.db.firestore.runTransaction(t => {
return Promise.all([
t.get(reservationCol.doc('id1')),
t.get(reservationCol.doc(('id2')))]
).then((responses) => {
let found = false;
responses.forEach(resp => {
if (resp.exists)
found = true;
});
if (!found)
{
entity.id='id1';
t.set(reservationCol.doc(entity.id), entity);
return Promise.resolve('ok');
}
else
return Promise.reject('exist');
});
});
【问题讨论】:
-
你发现了吗?我也有同样的问题。就我而言,我有一个未知数量的firestore引用数组,我需要获取每个引用,然后为每个引用添加+1并全部更新。他们肯定需要文档中的多次获取示例。
-
不,我没有更新它,我使用另一个包含所有信息的结构解决了这个问题。这样我就可以单读了。
标签: transactions angularfire2 google-cloud-firestore