我知道在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>
TL; DR:d3.queue
D3 v5 完全不需要,因为它在内部使用Fetch API。因此,您可以只使用类似方法Promise.all()
或将then()
方法链接在一起。
您可能知道,d3.queue
它应该与D3 v4一起使用,而不是与D3 v5一起使用。由于queue
D3 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.csv
,d3.json
,d3.tsv
等不具有回调的第二个(最后)的说法。取而代之的是,它们返回承诺(使用Fetch API)。
话虽如此,上面的代码片段不仅丑陋,而且完全没有必要:只需drop即可d3.queue
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句