所以我有这段代码来检查数据库中的日期是否有事件。我想在几周和几天的数组中将hasEvent设置为true。问题是最后它将同一行记录4次。为什么要这样做,我该如何解决呢?
这是我目前使用的代码:
for (var i = 0; i < weeks.length-1; i++) {
for (var j = 0; j < weeks[i].days.length-1; j++) {
var datum = weeks[i].days[j];
db.collection('events').doc(datum.year + "-" + datum.month + "-" + datum.day).get().then(function(doc) {
if (doc.exists) {
console.log(datum.year + "-" + datum.month + "-" + datum.day + " is true" + " i " + i + " j " + j);
weeks[i].days[j].hasEvent = "true";
}else{
weeks[i].days[j].hasEvent = "false";
}
});
}
}
它一直在返回 2018-04-28是真的我5 j 6 我使用firestore数据库。该集合称为事件。在事件中我有一个日期为名称的文档,在那里我有一些信息。
答案 0 :(得分:1)
这是因为当执行异步调用后的回调时,循环结束,此时i
保持值weeks.length-2
和j
值weeks[i].days.length-2
。< / p>
您可以使用Array#forEach()代替for循环以避免该行为,并确保每个异步调用都包含在其自己的具有正确索引值的功能块中。