gpt4 book ai didi

javascript - NodeJS Promise .then 在循环完成后完成?

转载 作者:行者123 更新时间:2023-12-03 01:59:58 26 4
gpt4 key购买 nike

所以我有这段代码来检查数据库中的日期是否有事件。我想在几周和几天的数组中将 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 is true i 5 j 6我使用 firestore 数据库。该集合称为事件。在事件中,我有一个以日期为名称的文档,其中有一些信息。

最佳答案

这是因为当执行异步调用后的回调时,循环完成,此时 i 持有值 weeks.length-2j weeks[i].days.length-2

您可以使用Array#forEach()相反,使用 for 循环来避免这种行为,并确保每个异步调用都包含在其自己的函数 block 中,该函数 block 保存正确的索引值。

关于javascript - NodeJS Promise .then 在循环完成后完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50080723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com