私は配列内のキーをループし、それぞれのリファレンスをFirebaseから引き出す、React-nativeアプリケーションに関数を持っています。対応するネイティブキーがfor-loopで正しく更新されませんか?
しかし、私のforループでは、適切なrefが常に評価されますが、forループ自体の中のキー値は常に3であるため、totalItemsCompleted
(これはuserItemsArray
のキーの長さに等しい)です。常に同じ
listenForItems(itemsRef) {
var userItemsArray = {
0: [1],
1: [5, 6],
2: [8, 9, 10],
3: [11, 12, 13]
};
var pastItems = [];
var currentItems = [];
for (var key in userItemsArray) {
console.log("KEY1 " + key); //key is correct here
var itemRef = itemsRef.child(key);
itemRef.on('value', (snap) => {
var totalItemsOnList = snap.val().items.length;
var totalItemsCompleted = userItemsArray[key].length;
console.log("KEY2 " + key); //key is always 3 here
if (totalItemsOnList===totalItemsCompleted) {
pastItems.push({
title: snap.val().title,
});
}
else {
currentItems.push({
title: snap.val().title,
});
}
this.setState({
currentItems: this.state.currentItems.cloneWithRows(currentItems),
pastItems: this.state.pastItems.cloneWithRows(pastItems)
});
});
}
}
は非同期プログラミングの素晴らしい世界へようこそ。あなたのforループはfirebase呼び出しが終了するのを待っていないので、キー値を更新し続けます。キーの代わりにconsole.log(snap.name())を実行しようとしますか? –
@AndréKoolaha!そのとおり;私は今snap.key()を使用して、正しい値を取得しています(snap.name()は間もなく廃止される予定です)。本当にありがとう! – user3802348
素晴らしいですが、回答として追加して、この問題に遭遇したときに他の人を助けることができます。と私は名前とキーの間に疑問を抱いていた、私はちょうど私がGoogle検索で見つけた最初のものを取った:) –