我有一个条件,我正在检查是否采用了用户名。如果没有,那么我检查电子邮件是否已注册(如果没有,则继续创建帐户)。我正在将firebase函数与业务逻辑分开......但我无法弄清楚如何将错误从createUserWithEmailAndPassword()返回到页面类以进一步处理。
if(usernameTaken) {
}else{
/*Username is available - Check email taken or not (if not, register)*/
var error = self.firebaseProvider.registerUser(self.email,self.password,self.username, self.name);
if(error.code !== ""){
if(error.code == "auth/email-already-in-use"){
let alert = self.alertCtrl.create({
title: 'Email Exists',
subTitle: 'The email you entered is already registered.',
buttons: ['Retry']
});
alert.present();
}else if(error.code == 'auth/weak-password') {
let alert = self.alertCtrl.create({
title: 'Validation Error',
subTitle: 'The password entered is weak and should be 6 characters.',
buttons: ['Retry']
});
alert.present();
}
}
}
这是firebase.ts中的代码:
registerUser(email: string, password: string, username: string, name: string): (any) {
var self = this;
this.fbAuth.auth.createUserWithEmailAndPassword(email, password).then(function() {
var user = firebase.auth().currentUser;
self.createUserRecord(username, email, name);
}).catch(function(error) {
//Handle error
return error;
});
}
返回的错误为null(未定义)因此没有按预期工作。请帮忙。
答案 0 :(得分:1)
您的代码需要进行一些重构,您的父级调用期望var error
thenable
来自err.code
对象的承诺,它不会有{{1}的响应1}}。
同样在error
类中返回registerUser
作为成功的响应可能很难调试,因此最好在父调用上设置catch句柄。
if (usernameTaken) {
} else
/*Username is available - Check email taken or not (if not, register)*/
self.firebaseProvider.registerUser(self.email,self.password,self.username, self.name)
.then(resp => {
// Do Something
})
.catch(err => {
if (error.code !== "") {
if(error.code == "auth/email-already-in-use"){
let alert = self.alertCtrl.create({
title: 'Email Exists',
subTitle: 'The email you entered is already registered.',
buttons: ['Retry']
});
alert.present();
} else if(error.code == 'auth/weak-password') {
let alert = self.alertCtrl.create({
title: 'Validation Error',
subTitle: 'The password entered is weak and should be 6 characters.',
buttons: ['Retry']
});
alert.present();
}
}
});
}
您需要在return
来电前添加this.fbAuth.auth.createUserWithEmailAndPassword
。
registerUser(email: string, password: string, username: string, name: string): Promise<any> {
var self = this;
return this.fbAuth.auth.createUserWithEmailAndPassword(email, password)
.then(function() {
var user = firebase.auth().currentUser;
return self.createUserRecord(username, email, name);
});
}
现在,如果函数抛出错误,则会在父类中处理,您可以看到createUserRecord
和error
之间的差异。