首页  >  文章  >  web前端  >  为什么我的 d3.json() 回调中的代码未在 D3 v5 中执行?

为什么我的 d3.json() 回调中的代码未在 D3 v5 中执行?

Linda Hamilton
Linda Hamilton原创
2024-10-30 13:54:03325浏览

Why Is My Code Within the d3.json() Callback Not Executing in D3 v5?

d3.json() 回调中的代码执行中断

在 D3 v5 中,d3.json() 回调中的代码无法执行,让开发人员感到困惑。这种差异的出现是由于 D3 v4 以来 d3.json() 的签名发生了重大变化。

D3 v5 中向 Promises 的迁移

D3 v5 已经放弃了 XMLHttpRequest 并采用了 Fetch API,有利于承诺管理异步请求。因此,d3.json() 的第二个参数不再是负责处理请求的回调。相反,它充当可选的 RequestInit 对象。因此,d3.json() 现在返回一个可以使用其 .then() 方法操作的 Promise。

用于处理异步请求的修订代码

要解决此问题,您的代码应修改如下:

d3.json("/trip_animate/tripData.geojson")
  .then(function(data){
    // Code from your callback goes here...
  });

D3 v5 中的错误处理

D3 v5 中的错误处理也发生了变化。在早期版本中,错误是通过传递给 d3.json() 的回调的第一个参数报告的。然而,在D3 v5中,如果发生错误,d3.json()返回的Promise将被拒绝。这使得可以使用普通的 JS 错误处理机制:

使用拒绝处理程序作为 .then() 的第二个参数

d3.json("/trip_animate/tripData.geojson")
  .then(function(data) {
    // Code from your callback goes here...
  }, function(error) {
    // Error handling code here...
  });

使用 .catch( ) 处理拒绝

d3.json("/trip_animate/tripData.geojson")
  .then(function(data) {
    // Code from your callback goes here...
  })
  .catch(function(error) {
    // Error handling code here...
  });

以上是为什么我的 d3.json() 回调中的代码未在 D3 v5 中执行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn