Javascript 如果其中一个在创建新文档时引发异常,是否在两个文档中回滚持久性?
我正在创建注册表单,将数据插入firebase身份验证的用户,并将其他数据插入用户文档。以下是注册操作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();
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身份验证用户,另一个是用户文档