2017-07-21 5 views
0

Angular Fire 2を使用しているIonic 2アプリケーションでCurrent User Idconstructorに取得しようとしています。しかし、私はconstructorが2回発射されていることに気付きましたが、ユーザがCurrent IDにログインしたことを示していますが、初めてcurrentUserオブジェクトが定義されていないなどのエラーが発生しました。以下は私が使用しているconstructorコードです。以下Ionic 2 - Angular Fire - ログインしてください。ユーザーIDがコンストラクタで2回実行されます

constructor(private afAuth: AngularFireAuth, private afDatabase: AngularFireDatabase, private auth: AuthProvider) { 
 
    console.log('Hello AnonymousTask Provider'); 
 

 
    this.userId = this.afAuth.auth.currentUser.uid; 
 
    console.log(this.userId) 
 

 
    this.taskList = this.afDatabase.list(`/tasks/${this.afAuth.auth.currentUser.uid}/anTasks`); 
 
}

エラーメッセージを示すコンソールのスナップショットです。

enter image description here

constructorは二回発射されている理由私は本当に理解できませんでした。私はそれが最初に起動したときに、Current Userオブジェクトが準備ができていない可能性があることを理解しています。

私はawaitを使用しようとしましたが、この方法は同期しています。どのように私はこれを修正することができますか、またはあなたのために働いたことについての任意の提案?

+0

角度2+の質問には角度タグを使用し、角度1.xの質問にはanglejsタグを使用してください。ありがとうございました。 –

答えて

1

ユーザがロードされる前に、時にはそれがnullを返した関数を呼び出すので、私はユーザをフェッチの同期方法を使用して停止:

this.afAuth.auth.currentUser.uid; 

代わりに、私は今、非同期方法を使用して、それに加入する、例えば:

this.afAuth.authState.subscribe(user => { 
    this.userId = user.uid; 
    this.taskList = this.afDatabase.list(`/tasks/${user.uid}/anTasks`); 
}); 

こうすることで、userIdを呼び出す前にユーザーが読み込まれるようになります。

0

あなたのコードからコンストラクタが2回実行される理由は明確ではありません。あなたのユーザーがまだログインしていないときのように見えます。this.afAuth.auth.currentUser.uidのチェーン全体が有効かどうかを確認することです。あなたはユーザーがログインしているかどうかをテスト場合、またはネストされたステートメントを使用する、または関数like this使用するangularfireの機能を使用することができます。注意点として

if (validChain(this, "afAuth", "auth", "currentUser", 'uid')) { 
console.log(this.userId) 

this.taskList = 
this.afDatabase.list(`/tasks/${this.afAuth.auth.currentUser.uid}/anTasks`); 
} else { 
    console.log("User seems to be offline!") 
} 

を、Angularfireとの私の経験は楽しみではなかったです。 Ionicが更新されるたびに、私はそれを動作させることに問題がありました。長期的に考えているなら、Firebase独自のAPIを使うことをお勧めします。

+0

あなたは正しいです、物事が壊れているのでAFは楽しいものではありません。提案してくれてありがとう、私は後でここで結果を更新しようとします – Thr3e

関連する問題