firebase firestore wrap updateProfile функция внутри транзакции - PullRequest
1 голос
/ 09 апреля 2019

Я обертываю некоторые обновления внутри транзакции, чтобы сделать их атомарными. Например, когда пользователь обновляет свое displayName (которое хранится в коллекции пользователей), displayName из firebase auth также должно быть обновлено. Я хочу сделать оба эти обновления внутри транзакции. Все примеры, которые я видел до сих пор для транзакций, касаются обновления некоторых данных документа внутри некоторой коллекции. Как насчет обертывания функций аутентификации внутри транзакции или связывания их с существующими транзакциями? Возможно ли это?

У меня есть этот фрагмент:

        db.runTransaction((transaction)=>{
            return transaction.get(displayNameCheckRef).then((snapshot)=>{
                var newDisplayName = this.state.name;
                if(snapshot.empty){
                    transaction.set(currentUserRef, {displayName:newDisplayName});
                }
            });
        })
        .then((newDisplayName)=>{
            console.log("display name changed to " + newDisplayName);
        })
        .catch((error)=>{
            console.log("transaction error.");
            console.log(error);
        });

Теперь я хочу связать приведенную ниже функцию updateProfile с транзакцией выше. Как мне это сделать?

   user.updateProfile({
       displayName: this.state.name
   }).then(() => {
     //do some stuff here
   });

Большое спасибо!

1 Ответ

0 голосов
/ 09 апреля 2019

То, что вы пытаетесь сделать, невозможно. Транзакции Firestore способны работать с документами только в одной базе данных, связанной с проектом. Они не могут влиять на другие продукты, такие как Аутентификация Firebase или Облачное хранилище для Firebase.

Если вам нужно выполнить атомарную операцию для нескольких продуктов, ваш код должен будет откатывать обновления вручную от нескольких продуктов, и в этих откатах все равно могут быть ошибки, поэтому в случае сбоя вам потребуется придумать какое-нибудь резервное поведение. .

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