firebase离子 - 返回错误



我有一个条件,我正在检查是否使用了用户名。如果没有,则我检查是否已注册电子邮件(如果没有注册,请继续创建帐户(。我将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);    
    });
}

现在,如果函数引发错误,则在父类中处理了错误,您可以看到createUserRecorderror之间的区别。

最新更新