2016-05-14 11 views
0

私は現在、onceを使用して火災基地からアイテムの値を引き出し、この値を使用して、itemsListを設定しようとしています。ただし、itemsListはonce呼び出し内に正しく挿入されていますが、呼び出しの外では未定義として記録されます。これはFirebaseの非同期性と関係しているかもしれませんが、この問題をどのように修正するかはわかりません。助言がありますか?Firebaseクエリからの変数の値を更新しますか?

submitAnswer: function() { 
    var userRef = usersRef.child(key); 

    //get items_list for user 
    var itemsList; 
    userRef.once('value', (snap) => { 
     itemsList = snap.val().items_list; 
     console.log('items list populated here' + itemsList); 
    }); 

    console.log("items list not populated here" + itemsList); 
}, 

答えて

2

Firebaseの呼び出しについては正しいですが、非同期であり、コードは未処理のitemsListを記録する前に完了するのを待つことはありません。

データで簡単な操作を行う場合は、その操作を実行する前に存在することを確認してください(非同期データと同様に扱います)。

if(itemsList){ 
    console.log('My items have arrived! ' + itemsList); 
} 

は、そのデータが新しいデータであなたのコンポーネントの再描画をトリガするために、通常Firebaseからあなたの応答データとSETSTATE()への呼び出しを行うことが示唆されたアプリの下にさらに増殖されようとしている場合あなたはちょうどフェッチしました。

だから、の線に沿って何か:

userRef.once("value", (snap) => { 
    itemsList = snap.val().items_list; 

    this.setState({ 
    items: itemsList; 
    }); 

}.bind(this)); 
関連する問題