Обновление 2 полей в облачном хранилище Google в рамках транзакции - PullRequest
1 голос
/ 08 ноября 2019

У меня есть транзакция, которая состоит из одной операции обновления и одной операции установки. Со стороны клиента я отправляю 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");
    }

Я ожидал, что операция обновления откатится, если операция набора не может произойти, но не произойдет откат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...