javascript - 将 d3.queue 与 D3 v5 一起使用
问题描述
我知道它在 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 v5 中您根本不需要d3.queue
,因为它在内部使用了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 d3.queue
v5 来获取文件,则必须将适当的函数传递给defer
{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
回调作为第二个(最后一个)参数。取而代之的是,它们返回一个承诺(使用 Fetch API)。d3.json
d3.tsv
话虽如此,上面的代码片段不仅丑陋而且完全没有必要:只需 drop d3.queue
。
推荐阅读
- azure-devops - 如果 PR 由 VSTS/Azure devops 中的特定团队提出,则运行预验证构建
- javascript - 动态创建的元素上的 addEventListener 不起作用
- identityserver4 - 使用 Identity Server 保护 ASP.NET Core Blazor WebAssembly 托管的应用程序
- javascript - 如何在 Vue 中正确使用渲染功能?
- android - 无法将对象添加到模块中。只能添加作为此项目一部分的扩展 RealmObject 或实现 RealmModel 的类
- mysql - 使用 MYSQLSH 将数据从 csv 上传到 MYSQL Server
- python - Django AutoSlugField 不考虑 Django Safe Delete 软删除的实例
- c - 在C中发送以000开头的字符串
- dita - 在 DITA-OT 命令行 PDF 转换中将文件名设置为 ditamap 标题
- git - WebStorm 中的 Git 提交消息挂钩不起作用