首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在D3 v5中使用d3队列

在D3 v5中使用d3队列
EN

Stack Overflow用户
提问于 2020-07-16 18:50:01
回答 1查看 1.3K关注 0票数 3

我知道d3.queue()在D3版本5中已经被Promise取代了,实际上,如果我尝试使用我得到的函数:

D3.队列不是函数

但是,我不明白为什么如果我把它放在html头中,我就不会再得到上面的错误了,但是代码似乎不起作用:

代码语言:javascript
复制
<head>
    <script src="https://d3js.org/d3.v5.min.js"></script>
    <script src="https://d3js.org/d3-queue.v3.min.js"></script>
</head>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-17 00:43:06

TL;DR:您根本不需要D3 v5中的d3.queue,因为它在内部使用取API。因此,您可以只使用诸如Promise.all()或链接then()方法之类的东西。

您可能知道,d3.queue应该与D3 v4一起使用,而不是D3 v5。由于在queue v5中没有D3方法,因此,如预期的那样,只要尝试d3.queue就会导致d3.queue is not a function错误。当你引用迷你库时,错误明显消失了.

值得一提的是,如果将d3.queue 与D3 v5一起使用,则将工作,这不是一个问题:

代码语言:javascript
复制
d3.queue()
  .defer(function foo(callback) {
    setTimeout(function() {
      callback(null, "finished");
    }, 100);
  })
  .await(function(error, message) {
    console.log(message);
  });
代码语言:javascript
复制
<script src="https://d3js.org/d3.v5.min.js"></script>
<script src="https://d3js.org/d3-queue.v3.min.js"></script>

但是,如果出于任何原因,您仍然希望将d3.queue与D3 v5一起用于获取文件,则必须将适当的函数传递给defer,并使用这样的回调(这里使用的是我在网上创建的简单JSON,也就是{foo: 42}):

代码语言:javascript
复制
d3.queue()
  .defer(function foo(url, callback) {
    d3.json(url).then(function(file) {
      callback(null, file)
    })
  }, "https://api.npoint.io/5b22a0474c99d3049d2e")
  .await(function(error, message) {
    console.log(message);
  });
代码语言:javascript
复制
<script src="https://d3js.org/d3.v5.min.js"></script>
<script src="https://d3js.org/d3-queue.v3.min.js"></script>

原因是,与D3 v4或更低版本不同,在D3 v5方法(如d3.csvd3.jsond3.tsv等)中,没有回调作为第二个(最后)参数。相反,他们返回一个承诺(使用Fetch API)。

尽管如此,上面的片段不仅丑陋,而且完全没有必要:只需删除d3.queue即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62941644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档