Firebase Ionic - 返回错误

时间:2018-02-19 21:50:19

标签: firebase ionic-framework firebase-authentication ionic3

我有一个条件,我正在检查是否采用了用户名。如果没有,那么我检查电子邮件是否已注册(如果没有,则继续创建帐户)。我正在将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(未定义)因此没有按预期工作。请帮忙。

1 个答案:

答案 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);    
    });
}

现在,如果函数抛出错误,则会在父类中处理,您可以看到createUserRecorderror之间的差异。