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

Javascript 未执行d3.json()回调中的代码,javascript,d3.js,Javascript,D3.js,我试图加载一个GeoJSON文件,并使用它作为D3v5的基础绘制一些图形 问题是浏览器跳过了d3.json()调用中包含的所有内容。我尝试插入断点进行测试,但浏览器跳过了断点,我无法找出原因 下面是代码片段 d3.json("/trip_animate/tripData.geojson", function(data) { console.log("It just works"); // This never logs to console. //...all the rest }

我试图加载一个GeoJSON文件,并使用它作为D3v5的基础绘制一些图形

问题是浏览器跳过了
d3.json()
调用中包含的所有内容。我尝试插入断点进行测试,但浏览器跳过了断点,我无法找出原因

下面是代码片段

d3.json("/trip_animate/tripData.geojson", function(data) {

  console.log("It just works");  // This never logs to console.

  //...all the rest
}
代码从最初的
console.log()
继续,但我省略了所有代码,因为我怀疑问题在于
d3.json
调用本身

从D3 v4到v5的has签名。它已从现在已弃用的模块d3请求移动到新模块。从v5开始,D3使用了有利于较旧的
XMLHttpRequest
,并反过来采用了来处理这些异步请求

d3.json()
的第二个参数不再是处理请求的回调,而是一个可选对象
d3.json()
现在将返回您可以在其方法中处理的承诺

因此,您的代码变为:

d3.json("/trip_animate/tripData.geojson")
  .then(function(data){
    // Code from your callback goes here...
  });
随着fetchapi的引入,调用的错误处理也发生了变化。v5之前的版本使用传递给
d3.json()
的回调的第一个参数来处理错误:

d3.json(url, function(error, data) { 
  if (error) throw error;
  // Normal handling beyond this point.
});
从D3V5开始,如果遇到错误,
D3.json()
返回的承诺将被拒绝。因此,可以采用以下方法处理这些拒收:

  • 将拒绝处理程序作为第二个传递给
    。然后(onCompleted,onRejected)

  • 用于将拒绝处理程序添加到承诺中

  • 应用第二种解决方案,代码就变成了

    d3.json("/trip_animate/tripData.geojson")
      .then(function(data) {
        // Code from your callback goes here...
      })
      .catch(function(error) {
        // Do some error handling.
      });
    
    从D3 v4到v5的has签名。它已从现在已弃用的模块d3请求移动到新模块。从v5开始,D3使用了有利于较旧的
    XMLHttpRequest
    ,并反过来采用了来处理这些异步请求

    d3.json()
    的第二个参数不再是处理请求的回调,而是一个可选对象
    d3.json()
    现在将返回您可以在其方法中处理的承诺

    因此,您的代码变为:

    d3.json("/trip_animate/tripData.geojson")
      .then(function(data){
        // Code from your callback goes here...
      });
    
    随着fetchapi的引入,调用的错误处理也发生了变化。v5之前的版本使用传递给
    d3.json()
    的回调的第一个参数来处理错误:

    d3.json(url, function(error, data) { 
      if (error) throw error;
      // Normal handling beyond this point.
    });
    
    从D3V5开始,如果遇到错误,
    D3.json()
    返回的承诺将被拒绝。因此,可以采用以下方法处理这些拒收:

  • 将拒绝处理程序作为第二个传递给
    。然后(onCompleted,onRejected)

  • 用于将拒绝处理程序添加到承诺中

  • 应用第二种解决方案,代码就变成了

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

    @Timmmm,.then方法可以提供一个可选的第二个函数,如果承诺最终没有实现,则调用该函数:
    。然后(函数(数据){},函数(错误){})
    @Timmmm或者,您可以使用
    .catch(函数(错误){})
    ,这在很大程度上等同于Andrew的建议,但在口头上更加明确。@timmm,.then方法可以提供一个可选的第二个函数,如果承诺最终没有实现,则调用该函数:
    。然后(函数(数据){},函数(错误){})
    @Timmmm。或者,您可以使用
    .catch(函数(错误){})
    ,这在很大程度上等同于Andrew的建议,但在口头上更加明确。