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 时进行最后一次迭代的主要内容,如果未能解决你的问题,请参考以下文章

For Loop 没有正确应用 nth-child

仅在应用程序/小部件关闭时提交对 Firestore 的更改

Swift中的Loop for Loop总和

在 SSIS 中使用 For Each Loop 容器时如何检查点

使用 OR 查询获取 Firestore 文档

如何解决 PHP For loop IN 内存问题