我有一个条件,我正在检查用户名是否被占用。如果没有,那么我检查电子邮件是否已注册(如果没有,则继续创建帐户)。我正在将 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;
});
}
返回的错误为空(未定义),因此没有按预期工作。请帮忙。
您的代码需要进行一些重构,您的父调用期待一个承诺,因此var error
将通过一个thenable
对象,它不会有err.code
.
同样error
在您的registerUser
类中返回一个作为成功响应的可能难以调试,因此最好在父调用上设置捕获句柄。
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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句