我有一个条件,我正在检查是否使用了用户名。如果没有,则我检查是否已注册电子邮件(如果没有注册,请继续创建帐户(。我将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(未定义(,因此没有任何工作正常。请帮助。
您的代码需要一些重构,您的父呼叫正在期望承诺,因此var error
将由thenable
对象进行,它不会对err.code
的响应。
也很难调试registerUser
类中的error
,因此最好在父级呼叫上进行捕获手柄。
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();
}
}
});
}
您需要在this.fbAuth.auth.createUserWithEmailAndPassword
调用的前面添加return
。
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
之间的区别。