无法更新异步地图和地图

时间:2019-08-14 02:58:31

标签: javascript asynchronous google-cloud-firestore chart.js data-visualization

我正在使用ChartJS和Google Firestore查询一些数据并实时更新图表。 我通过使用数组成功完成了此操作,但是现在我需要在用户ID和对象之间创建一个映射,并从中更新图表,但这是行不通的。

db.collection("scenario-name").onSnapshot(function(querySnapshot) {
        querySnapshot.docChanges().forEach(function(change){ 
            if(change.type === "added"){ 
                userArray.push(change.doc.data().name);
                progressionArray.push(change.doc.data().progression);
                currentEnigmaArray.push(change.doc.data().current_tool);
                currentRoomArray.push(change.doc.data().current_location);
            }
       });
    myChart.update();
});

此代码当前有效(当我向Firestore添加内容时,我的图表会正确更新)

但是现在我需要在文档ID和包含所有这些属性(名称,进度,工具,位置)的对象之间创建一个映射。

    if(change.type === "added"){
          var user = new Object();
          user.name = change.doc.data().name;
          user.progression = change.doc.data().progression;
          user.currentRoom = change.doc.data().current_room;
          user.currentEnigma = change.doc.data().current_enigma;

          myMap.set(change.doc.id,user)
          t =  Array.from(myMap.values());
    }

t已创建,因此我可以为Chart构造创建一个属性数组(使用t.map(a => a.attribute))

但是,我的代码不再起作用了。图表未更新。我猜这是由于查询的异步行为引起的。

我尝试使用异步/等待,但是查询的格式以及仅当我拥有所有数据时才需要更新图表的事实(当我没有迭代器功能时,该任务就可以完成)真的很难)。

您知道该怎么做,以便myChart.update()仅在填满地图时发生吗?

0 个答案:

没有答案