У меня есть транзакция, которая состоит из одной операции обновления и одной операции установки. Со стороны клиента я отправляю 2 одновременных запроса на транзакцию. Операция обновления происходит несколько раз, даже если набор не выполнен.
public addChatMessage(msg, callback, errorCallBack) {
let msgColl = this.admin.firestore().collection('messages');
var obj1 = JSON.parse(msg);
var uid1 = obj1.message.senderID + "_"+obj1.message.senderLocalPostNo;
this.admin.firestore().collection('messages').doc(uid1).get().then((docSnapshot) => {
if (!docSnapshot.exists) {
let metaRef = this.admin.firestore().doc('messages/msgsMeta');
let msgRef = msgColl.doc(uid1);
let transaction = this.admin.firestore().runTransaction(t => {
return t.get(msgRef).then(a => {
return t.get(metaRef)
.then(doc => {
let newCounter = doc.data().counter + 1;
var finalResult = {message:obj1.message,serverPostNo:newCounter};
t.update(metaRef, {counter: newCounter});
t.set(msgRef, finalResult);
});
});
}).then(result => {
console.log('Transaction success', result);
}).catch(err => {
console.log('Transaction failure:', err);
});
} else {
console.log("document already exists");
}
});
console.log("EOF addChatMessage");
}
Я ожидал, что операция обновления откатится, если операция набора не может произойти, но не произойдет откат.