我正在尝试使用可变数量的读取操作来运行事务.我把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');
});
});
Run Code Online (Sandbox Code Playgroud)