Javascript 如果其中一个在创建新文档时引发异常,是否在两个文档中回滚持久性?

Javascript 如果其中一个在创建新文档时引发异常,是否在两个文档中回滚持久性?,javascript,reactjs,firebase,google-cloud-firestore,firebase-authentication,Javascript,Reactjs,Firebase,Google Cloud Firestore,Firebase Authentication,我正在创建注册表单,将数据插入firebase身份验证的用户,并将其他数据插入用户文档。以下是注册操作 export const signUp = (newUser) => { return async(dispatch, getState, {getFirebase, getFirestore}) => { const firebase = getFirebase(); const firestore = getFirestore();

我正在创建注册表单,将数据插入firebase身份验证的用户,并将其他数据插入用户文档。以下是注册操作

export const signUp = (newUser) => {
    return async(dispatch, getState, {getFirebase, getFirestore}) => {
      const firebase = getFirebase();
      const firestore = getFirestore();
      
      try{
        const {user} = await firebase.auth().createUserWithEmailAndPassword(
          newUser.email, 
          newUser.password
        );
        if(user)
        {
          const userRef = firestore.doc(`users/${user.uid}`);
          const snapshot = await userRef.get();
          if(!snapshot.exists) {
            try{
              await userRef.set({
                firstName: newUser.firstName,
                lastName: newUser.lastName,
                initials: newUser.firstName[0] + newUser.lastName[0],
                dob: newUser.dob
              })
              dispatch({ type: 'SIGNUP_SUCCESS' });
            }
            catch(err){
              throw new Error(`user creating error:${err}`)
            }
          }
          else{
            throw new Error(`Authenticate user not created`)
          }
        }
        else{
          throw new Error(`Authenticate user not able to create", error`)
        }
      }
      catch(err){
        dispatch({ type: 'SIGNUP_ERROR', err});
      }
      
  }
}

我试图强制将数据插入到两个文档中,或者在某个时刻出现错误时插入其中一个文档。例如,如果我在const userRef中传递了错误的值,则应该取消对身份验证用户的插入,但上述代码不起作用。

如果创建Firebase Auth用户帐户,回滚该帐户的唯一方法是使用调用删除该帐户。没有可以自动撤消身份验证操作的事务。而且没有办法创建一个跨Firebase产品的单一事务


对于您的特定情况,如果您想在文档写入失败时删除用户,则必须在userRef.set的catch块中调用user.delete。

我在这里只看到一个文档通过userRef写入。我不知道你说的这两份文件是什么意思。Firebase身份验证用户帐户不是Firestore文档。我的意思是一个是Firebase身份验证用户,另一个是用户文档