在D3 v5中使用d3.queue

stackfac:

我知道在D3版本5中d3.queue()已经替换了Promise它,的确,如果我尝试使用我得到的功能:

d3.queue不是函数

但我不明白为什么将其放在html标头中也不会再出现上述错误,但是代码似乎无法正常工作:

<head>
    <script src="https://d3js.org/d3.v5.min.js"></script>
    <script src="https://d3js.org/d3-queue.v3.min.js"></script>
</head>
Gerardo Furtado:

TL; DRd3.queueD3 v5 完全不需要,因为它在内部使用Fetch API因此,您可以只使用类似方法Promise.all()或将then()方法链接在一起


您可能知道,d3.queue它应该与D3 v4一起使用,而不是与D3 v5一起使用。由于queueD3 v5中没有方法,因此仅d3.queue按预期进行尝试会导致d3.queue is not a function错误。当您引用小型库时,错误显然消失了。

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

d3.queue()
  .defer(function foo(callback) {
    setTimeout(function() {
      callback(null, "finished");
    }, 100);
  })
  .await(function(error, message) {
    console.log(message);
  });
<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}):

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);
  });
<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)。

话虽如此,上面的代码片段不仅丑陋,而且完全没有必要:只需drop即可d3.queue

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章