首页 文章

在ionic2 app中正确处理异常

提问于
浏览
3

我的ionic2应用程序使用firebase身份验证 . 当我使用相同的电子邮件登录到多个提供商(谷歌和Facebook)时,我尝试处理auth / account-exists-with-different-credential错误 .

constructor(public af: AngularFire,public navCtrl: NavController) {
    firebase.auth().getRedirectResult()
      .then(res=>{
        console.log('success',res)
      })
  .catch((err:any)=>{
    console.log(error.message)
    if (err.code=='auth/account-exists-with-different-credential'){
       doaccountlink();
    }
  })
  }



    fblogin(){
        firebase.auth().signInWithRedirect(new firebase.auth.FacebookAuthProvider())
      }

      gglogin(){
        firebase.auth().signInWithRedirect(new firebase.auth.GoogleAuthProvider())
      }

我可以在catch块中捕获该错误代码(如预期的那样),但问题是在控制台中仍然显示Exception,我的页面也显示错误(请参阅附加图像) . 我是javascript / typescript的新手,在java中,如果我已经在catch块中捕获错误那么它应该没问题 . 或者我的代码有问题 . 如何防止此异常显示在我的页面上?

enter image description here

1 回答

  • 2

    我们需要仔细调试您的代码以准确理解发生了什么,必须在其他地方抛出另一个异常,这就是您看到该页面的原因;但是有一些技巧可能派上用场:

    • 与异常一起显示的页面是因为 IonicErrorHandler . 您可以查看 app.module.ts 文件,在providers数组中,您将找到以下行:
    providers: [
        // services...
        { provide: ErrorHandler, useClass: IonicErrorHandler }
    ]
    

    所以基本上Ionic正在扩展Angular 2 default's ErrorHandler与该类 . 另请注意,这已经完成 only when running on the dev server , 生产环境 中没有任何操作(您可以查看源代码here) .

    • 我不确定这在您的应用程序的上下文中是否有意义,但您可以构建自己的错误处理程序,并尝试使用您自己的代码处理异常 . 就像你可以看到here你可以通过创建一个实现 ErrorHandler 的新类来做到这一点
    class MyErrorHandler implements ErrorHandler {
        handleError(err: any): void {
            // do something with the error
        }
     }
    

    然后在你的 app.module.ts 替换

    { provide: ErrorHandler, useClass: IonicErrorHandler }

    { provide: ErrorHandler, useClass: MyErrorHandler }

相关问题