У меня есть родительский узел в firebase, под которым находится более 2000 дочерних узлов. Теперь я хочу отфильтровать данные из этих дочерних узлов на основе даты и значения дочерних объектов.
- структура данных Firebase
https://cdn.discordapp.com/attachments/391824274576506892/630383990372565002/unknown.png
https://cdn.discordapp.com/attachments/391824274576506892/630384128365428766/unknown.png
Облачная функция отправляет данные в базу данных при публикации mqtt с устройства IoT. теперь всякий раз, когда я получаю публикацию mqtt, в firebase создается дочерний узел с датой и временем, и одно из значений (хорошее, плохое, среднее) меняется на единицу или ноль, и вызывается обратный вызов из firebase, и выполняется следующий код.
setHourlyFeedbacks() {
var that = this;
var hourlyFeedbacks = { 2: 0, 4: 0, 6: 0, 8: 0, 10: 0, 12: 0, 14: 0,
16: 0, 18: 0, 20: 0, 22: 0, 24: 0 }
var today = new Date().toString().slice(0, 15);
var orgId = this.props.orgId;
var device = this.props.title;
var tf;
db.ref("new_data").child(this.props.orgId).child(this.props.title).on("value", function (snap) {
snap.forEach(node => {
var date = node.key;
date1 = date.slice(0, 15);
console.log(node.key)
if (date1 === today) {
hour = parseInt(date.slice(16, 18));
if (hour % 2 !== 0) {
if (hourlyFeedbacks[hour + 1] == null || 0) {
hourlyFeedbacks[hour + 1] = node.val().bad
}
else {
hourlyFeedbacks[hour + 1] += node.val().bad
}
}
else {
if (hourlyFeedbacks[hour] == null || 0) {
hourlyFeedbacks[hour] = node.val().bad
}
else {
hourlyFeedbacks[hour] += node.val().bad
}
}
}
});
detailsRef = db.ref("dailyStats/" + orgId + "/" + device + "/" + today);
detailsRef.on("value", (snap2) => {
console.log(snap2.val().footfall);
tf = snap2.val().footfall;
})
that.setState({ hourlyFeeds: hourlyFeedbacks,totalFeed:tf });
});
}
componentDidMount() {
this.setHourlyFeedbacks();
}
Изображение, помеченное частью 1, - это то, как компонент выглядит при первом отображении без обратного вызова Firebase, и отображаемое значение является правильным. Однако, когда обратный вызов firebase получен, часть, обозначенная 2, показывает визуализированный компонент со значением 21, где ожидаемое значение было равно 11, а затем при следующем обратном вызове ожидаемое значение равно 13, и отображаемое значение равно 33, как показано, часть помечена3 на изображении ниже.
https://cdn.discordapp.com/attachments/391824274576506892/630436091782103071/IMG_20191006_213736.jpg
- скриншот приложения
Возможно, это просто глупая ошибка, которую я совершил, но я не могу понять: - (