在 D3 v5 中,d3.json() 回调中的代码无法执行,让开发人员感到困惑。这种差异的出现是由于 D3 v4 以来 d3.json() 的签名发生了重大变化。
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.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中文网其他相关文章!