2017-04-13 10 views
0

整数の増分が奇妙に動作しています。最後のデータベース呼び出しでは、0,1,2からではなく、2,2,2に設定されています。誰もが問題を参照してください?ファイヤーベースコールの内部での整数の増分

let chats = firebase.database().ref(`/userProfile/${this.userAuth.uid}/messages/`); 
let profiles = firebase.database().ref('/userProfile'); 
chats.on('value', (snapshot) => { 
    let i = -1; 
    this.messagesList = []; 

    for (let key in snapshot.val()) { 
    i++; 

    chats.child(key).limitToLast(1).on('value', (data) => { 
     this.messagesList[i] = data.val(); 
     for (let message in this.messagesList[i]) { 
     this.messagesList[i].conversation_key = message; 
     } 
     console.log(i); // RETURNS 0,1,2 
    }); 

    console.log(i); // RETURNS 0,1,2 

    profiles.child(key).on('value', (data) => { 
     console.log(i); // RETURNS 2,2,2 
     this.messagesList[i].firstname = data.val().firstname; 
    }); 
    } 
}); 

答えて

0

これは非同期の問題です。 profilesがデータベースからフェッチされ、コールバック関数が実行されるまでには、for -loopはすでに完了しています。

profile.child()ステートメントのコールバック機能内で、chats.child()およびi++ステートメントを試して移動してください。

希望は意味があります。

+0

幸運にもそれを試してみました。/ – naghulam

+0

申し訳ありませんが、私は別の方法を意味しました。 chats.childとi ++をprofiles.childのコールバックに移動します。問題はまだ述べられているとおり、forループはprofile.childの前に完了します。増分をprofiles.childの増分と同期させる必要があります。 – unitario