d3.queue没有给出一个输出

问题描述 投票:1回答:1

这就是 网页 我试图通过启用交叉过滤来使其动态化.所以他们有多个API。

对于顶部的前两个。TOTAL CASES & DAILY CASES 他们正在使用这个 API 而最上面的第三个则是基于这个。API.

后面三个 AGE, GENDERNATIONALITY 是来自于这个 API.

在所有的API中,有一件事是共同的,那就是日期,但也有一些API中的一些数据是缺失的几个日期,如有一个缺口(对一些日期不可用)。

因此,我想结合所有的JSON API的日期,然后允许交叉过滤,因为我相信我可以使他们之间的交叉过滤。如果我错了,请纠正我。

就像如果我点击性别女性,因为它给出了关于总病例的信息,患者是女性,所以只有确认的病例从总病例将改变,而不是恢复,死亡的数据是不可用的。所以我想我应该把前3个图表和性别、年龄、国籍图表合并在一起。这样Dc js就可以很好地处理各部分之间的过滤(与地标相关的案例,与个人信息相关的案例)。

第123行。

var log = console.log; 

var q = queue()
    .defer(d3.json, "https://api.covid19india.org/data.json")
      .defer(d3.json, "https://api.rootnet.in/covid19-in/unofficial/covid19india.org/statewise/history");

    q.await(function(error, data1, data2) {
      log("==========>");
    log("data1:", error,data1);
    log("data2:", data2);
});

这不行,因为我看不到... ... console.log() 输出。

https:/blockbuilder.orgninjakx8c48ab6481311aa0452046d66c4d8701。

所以我的问题是

1)为什么d3.queue不能用?

2)建议把所有的数据合并在一起,允许填报是否是个好主意,因为数据有限。我是否应该在同一个api图表之间进行交叉过滤。所以在这种情况下,我将有2个部分(与地标相关的案例,与个人信息相关的案例)...使用DC js,我想让它更加互动,并显示更多的信息。

dc.js
1个回答
1
投票

d3.队列是过时的

你的第一个问题的答案很简单:你不需要d3.queue,而且它是一个很好的例子。弃用和删除 在d3@5中,D3的数据加载API使用ES6承诺代替异步回调。

从 d3@5 开始,D3 的数据加载 API 使用 ES6 Promises 而不是异步回调,因此您可以使用 Promise.all([...]) 而不是d3.queue。显然没有办法让新的API在用旧的方式调用时发出错误,所以就这样默默地失败了:-。

新的写代码的方式是

Promise.all([
  d3.json("https://api.covid19india.org/data.json"),
  d3.json("https://api.rootnet.in/covid19-in/unofficial/covid19india.org/statewise/history")
]).then(([data1,data2]) => {
    log("==========>");
    log("data1:", data1);
    log("data2:", data2);
})
.catch(error => log('error', error))

我发现这样更容易阅读和理解。一个很好的副作用是,如果你忽略了错误处理(像大多数人一样),你会自动在日志中得到一个清晰的信息。

你的代码块的工作分叉.

合并多个数据集

你的第二个问题是相当开放的,也许最好把这个问题带到。dc.js用户组?

一般来说,很难交叉过滤多个数据集。你会有多个图表组一起重新绘制,你必须在一些图表上手动添加处理程序来启动、清除过滤器,并重新绘制其他图表组。

我还没有看到太多这样做的仪表盘。你得让用户清楚地知道是怎么回事。

© www.soinside.com 2019 - 2024. All rights reserved.