2017-07-31 6 views
0

Firebaseからデータを取得しています。値を抽出して配列に保存したい。その後、私はその配列値をアプリケーションの文字列として使用します。問題は、DBから配列に値をプッシュするときです。配列の最後には定義されていません。そして、私は、配列(carUserDetails [0])はundefinedを返しますが、文字列を返すべき "BMW"配列に値をプッシュすると、最後に未定義が追加されます

var UserID = firebase.auth().currentUser.uid; 
var refModels = firebase.database().ref("https://stackoverflow.com/users/" + UserID); 

var carUserDetails = []; 

refModels.once('value').then(function (snapshot) { 
    snapshot.forEach(function (childSnapshot) { 
     var usersValue = childSnapshot.val(); //get the values of the object 
     carUserDetails.push(
      usersValue.carMake, 
      usersValue.carYear, 
      usersValue.carModel, 
      usersValue.carTrim 
     ); 
    }); 
}); 

console.log(carUserDetails); 

enter image description here

console.log(carUserDetails[0]) // returns undefined too 

の値を確認したいときだから何が問題になる可能性がある

+1

チェック後にコンソールを置く必要があります。そして、2回目の反復でusersValue.carMakeは定義できません – Lalit

+1

'snapshot'を印刷するとどうなりますか? – smartmouse

+0

pushを押した直後にconsole.logを追加して、uservalueを出力し、おそらくループが2回実行されているかを確認してください。あなたはcarUserDetailsを取得しています。非同期コードの実行のために未定義です –

答えて

0

そう、それは非同期呼び出しの問題です。私はあなたがあまりにも早くconsole.logがfirebase値の読み取りが非同期であることを覚えている呼んでいるので、それはだと思う修正

var UserID = firebase.auth().currentUser.uid; 
var refModels = firebase.database().ref("https://stackoverflow.com/users/" + UserID); 

var carUserDetails = []; 

refModels.once('value').then(function (snapshot) { 
    snapshot.forEach(function (childSnapshot) { 
    var usersValue = childSnapshot.val(); //get the values of the object 
    carUserDetails.push(
     usersValue.carMake, 
     usersValue.carYear, 
     usersValue.carModel, 
     usersValue.carTrim 
    ); 
    }); 

    $scope.getValueFromArray(); //call function here 

    }); 



$scope.getValueFromArray = function(){ 

    console.log(carUserDetails[0]); returns "BMW" 
} 
1

を参照してください。あなたのループが2回実行されている場合は、function (snapshot)の内側とsnapshot.forEach

refModels.once('value').then(function (snapshot) { 
    snapshot.forEach(function (childSnapshot) { 
    .... 
    }); 
    console.log(carUserDetails); 
}); 
関連する問題