gpt4 book ai didi

transactions - 具有多个 get 的 Firestore 事务

转载 作者:行者123 更新时间:2023-12-04 04:24:07 32 4
gpt4 key购买 nike

我正在尝试运行具有可变数量的读取操作的事务。
我把read()操作放在update()之前。

阅读 https://cloud.google.com/firestore/docs/manage-data/transactions 上的 Firestore 文档

"A transaction consists of any number of get() operations followed by any number of write operations such as set(), update(), or delete()"





使用事务时,请注意:

  • Read operations must come before write operations.
  • A function calling a transaction (transaction function) might run more than once if a current edit affects a document that the transaction reads.
  • Transaction functions should not directly modify application state.


但没有提供实现。
当我尝试运行下面的代码时,我发现事务函数运行了更多时间,然后我得到了一个异常。
但是,如果我只尝试一个,一切都会好起来的。
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 文档没有这样说,但答案隐藏在 API 引用中:https://cloud.google.com/nodejs/docs/reference/firestore/0.13.x/Transaction?authuser=0#getAll

您可以使用 Transaction.getAll()而不是 Transaction.get()获取多个文档。您的示例将是:

const reservationCol = this.db.firestore.collection('reservations');
return this.db.firestore.runTransaction(t => {
return t.getAll(reservationCol.doc('id1'), reservationCol.doc('id2'))
.then(docs => {
const id1 = docs[0];
const id2 = docs[1];
if (!(id1.exists && id2.exists)) {
// do stuff
} else {
// throw error
}
})
}).then(() => console.log('Transaction succeeded'));

关于transactions - 具有多个 get 的 Firestore 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47664012/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com