2016-12-25 74 views
2

我ionic2應用程序中使用火力認證。我嘗試使用同樣的電子郵件登錄到多個提供商(谷歌和臉譜)這樣的處理認證/帳戶存在與不同憑據錯誤。在ionic2應用程序處理異常正常

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塊的錯誤代碼(如預期),但問題是異常仍顯示在控制檯和我的網頁也顯示錯誤(參見附圖片)。我是新來的JavaScript/typescript,在Java中,如果我已經趕上catch塊中的錯誤,那麼它應該沒問題。或者我的代碼有問題。我怎樣才能防止這個異常顯示在我的網頁上?

enter image description here

回答

2

我們需要仔細調試代碼,以瞭解到底發生了什麼事情,必須有被扔在別處另一種例外,這就是爲什麼你看到的頁面;但也有可能會派上用場的一些技巧:

  1. 時顯示不同的是頁面,是因爲IonicErrorHandler的。你可以看看你的app.module.ts文件,並提供一個存儲中,你會發現這條線:

    providers: [ 
        // services... 
        { provide: ErrorHandler, useClass: IonicErrorHandler } 
    ] 
    

    所以基本上離子與該類擴展Angular 2 default's ErrorHandler。還要注意的是,這是正在做只開發服務器上運行時,沒有什麼是做生產的(你可以看看源代碼here)。

  2. 我不知道,如果在你的應用程序的情況下這是有意義的,但你可以建立自己的錯誤處理,並嘗試用自己的代碼來處理異常。就像你可以看到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 }

+0

謝謝,sebaferreras。使用自定義錯誤處理程序幫助我避免在頁面上顯示錯誤,只顯示在控制檯上。但我認爲錯誤應該處理並在收件箱中完成。它不應該轉到IonicErrorHandler或myCustomHandler。重現問題,只需創建空白的ionic2項目,添加angularfire2模塊,然後在home.ts中寫入2個函數(gglogin和fblogin)。 whati'm不能提供這裏在app.module.ts火力配置 – user1084081

+0

@ user1084081是否有可能,這是一個錯誤? https://github.com/angular/angularfire2/issues/566#issuecomment-250344817 – Clark