For Loop 仅在使用 FireStore 时进行最后一次迭代
Posted
技术标签:
【中文标题】For Loop 仅在使用 FireStore 时进行最后一次迭代【英文标题】:For Loop only taking last iteration when using FireStore 【发布时间】:2018-07-04 20:30:22 【问题描述】:我正在尝试比较 Firebase/Firestore 数据库中的值,并且我正在根据值是否为真来更改 div 边框样式。 For 循环每次都经过,但只保留最后一个。所以我猜它在循环中重写,但我不明白怎么做?
// HANDLES THE FRONTEND TOGGLE/COLOR CHANGE OF SKILLS ON THE FRONTEND
for (var i = 0; i < skills.length; i++)
var toggledSkills = skills[i].id;
console.log(toggledSkills);
var query = db.collection('users').where(toggledSkills, "==", true);
query.get().then(function(querySnapshot)
if (querySnapshot.empty)
// IF THE SKILL IS NOT LEARNED, PLAIN STYLING
document.getElementById(toggledSkills).parentNode.style.border = "2px solid purple";
else
// IF THE SKILL IS TRUE/ALREADY LEARNED, COOL STYLING
document.getElementById(toggledSkills).parentNode.style.border = "2px solid green";
);
【问题讨论】:
你需要为每个查询快照做。把它放在你的 for i 循环之外 感谢您的评论。不幸的是,查询快照需要“查询”变量,该变量在 for 循环的每次迭代后重新创建。因此,如果 querySnapshot 在外部,它就没有“查询”变量可以使用,对吗? 【参考方案1】:如果你得到多个元素,你应该使用 forEach 遍历所有列表。
类似这样的:
db.collection("cities").where("capital", "==", true)
.get()
.then(function(querySnapshot)
querySnapshot.forEach(function(doc)
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
);
)
.catch(function(error)
console.log("Error getting documents: ", error);
);
您可以在这里找到更多信息:https://firebase.google.com/docs/firestore/query-data/get-data
【讨论】:
不幸的是,我得到了相同的结果,最后一个 div 样式正在更改,其余的保持标准。感谢您的回复。 @Chance 您可以将带有 foreach 的代码添加到您的问题中吗?以上是关于For Loop 仅在使用 FireStore 时进行最后一次迭代的主要内容,如果未能解决你的问题,请参考以下文章
仅在应用程序/小部件关闭时提交对 Firestore 的更改