交易内部的firebase firestore wrap updateProfile函数

时间:2019-04-09 12:26:31

标签: javascript firebase react-native transactions google-cloud-firestore

我将一些更新封装在事务中,以使其成为原子。例如,当用户更新其displayName(存储在users集合中)时,firebase auth的displayName也将被更新。我想在一个事务中进行这两个更新。到目前为止,我所看到的所有交易示例都是关于更新某些集合中的某些文档数据。如何将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 :(得分:0)

您要尝试执行的操作是不可能的。 Firestore事务只能处理与项目关联的单个数据库中的文档。它们不会影响其他产品,例如Firebase身份验证或Firebase的Cloud Storage。

如果您需要跨多个产品进行原子操作,则您的代码将需要手动从多个产品回滚更新,并且这些回滚仍然可能有错误,因此如果出现故障,您将需要采取一些回退行为