2017-03-01 7 views
0

を未定義が、私は未定義の参照にをPromise.catch内の関数を呼び出すと、エラー状況に対処するためにPromise.catch内から関数を呼び出すしよう

を避けるために、それを構造化するかどうかはわかりませんされて

TypeError: Cannot read property 'showLoginErrorWindow' of null 
+0

プロミスはjavascriptの非同期メソッドで、javascriptで 'this'を使用しようとしています。 – Smit

+0

[コールバック内の正しい\ 'this \ 'にアクセスするにはどうすればいいですか?](http://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-inside-a-callback ) –

+0

あなたのコードをすべて投稿してください。あなたの例で 'this'が何を指しているのかを知る方法はありません。 –

答えて

1

ちょうどを追加します。目標は、非同期ログイン()関数を呼び出し、パスワードが無効で表示された場合、ユーザー

// Log in user 
login(email, password){ 
//send login request to firebase 
    this.af.auth.login(
    { 
     email: email, 
     password: password 
    }, 
    { 
     provider: AuthProviders.Password, 
     method: AuthMethods.Password, 
    } 
).then(function(){ 
    console.log('Success'); 
    }) 
    .catch(function(error){ 
    this.showLoginErrorWindow(error); 
); 
} 

// Display error message to user 
// ** This function never gets called ** 
showLoginErrorWindow(message){ 
    console.log('message: ' + message); 
    this.loginErrorMessage = 'Invalid email or password'; 
    this.showLoginError = true; //Angular 
} 

へのメッセージは私にエラーを与えていますをメソッドに追加し、必要に応じて使用します。私は毎回リンクハックthatsです。

// Log in user 
login(email, password){ 
//send login request to firebase 
var current = this; 
    this.af.auth.login(
    { 
     email: email, 
     password: password 
    }, 
    { 
     provider: AuthProviders.Password, 
     method: AuthMethods.Password, 
    } 
).then(function(){ 
    console.log('Success'); 
    }) 
    .catch(function(error){ 
    current.showLoginErrorWindow(error); 
); 
} 

// Display error message to user 
// ** This function never gets called ** 
showLoginErrorWindow(message){ 
    console.log('message: ' + message); 
    this.loginErrorMessage = 'Invalid email or password'; 
    this.showLoginError = true; //Angular 
} 

私が間違っている場合、これはおそらく私がやっていることです。私に知らせてください。

関連する問題