当前位置: 首页 > 面试题库 >

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

沈骞仕
2023-03-14
问题内容

我正在尝试加载GeoJSON文件并使用它作为D3 v5 的基础绘制一些图形。

问题在于浏览器正在跳过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.json已经改为从D3V4到V5。它已从现已弃用的模块d3请求移至新的d3提取模块。从v5开始,D3使用Fetch
API
来支持旧版本XMLHttpRequest,并依次采用Promises来处理那些异步请求。

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

这样,您的代码将变为:

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

调用的错误处理也随着Fetch API的引入而发生了变化。v5之前的版本使用传递给的回调的第一个参数d3.json()来处理错误:

d3.json(url, function(error, data) { 
  if (error) throw error;
  // Normal handling beyond this point.
});

从D3 v5开始,d3.json()如果遇到错误,将拒绝由返回的承诺。因此,可以应用处理这些拒绝的普通JS方法:

  1. 将拒绝处理程序作为第二个参数传递给.then(onFulfilled, onRejected)

  2. 用于.catch(onRejected)向承诺中添加拒绝处理程序。

应用第二个解决方案,您的代码就变成了

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


 类似资料:
  • 问题内容: 我用来加载包含我的数据的JSON文件,如下所示: 如果我做一个,我可以看到既不是空的也不是。但是,它似乎不包含我的数据数组,而是包含其他内容。 我在这里做错了什么? 注意:这是一个自我回答的问题,试图对以前很多问题都涉及到且API未明确解释的主题提供“规范”的问答。以下答案是对这些问题的一般指导。 问题答案: TL; DR (以及,等)不返回加载/解析的文件的内容。取而代之的是,它返回

  • 问题内容: 我有一段使用解释器执行的JavaScript代码。 如何测量这些数据库插入操作所花费的时间?我可以计算这段代码前后的日期值之差,但是由于代码的异步特性,这将是不正确的。 问题答案: 使用Node.js 和:

  • 我使用解释器执行了一段JavaScript代码。 如何度量这些数据库插入操作所花费的时间?我可以计算这段代码之后和之前的日期值的差值,但这是不正确的,因为代码的异步性质。

  • 我试图在一个项目上执行一些PHP代码(使用Dreamweaver),但代码没有运行。 当我检查源代码时,PHP代码显示为HTML标记(我可以在源代码中看到)。Apache运行正常(我正在使用XAMPP),PHP页面打开正常,但PHP代码没有执行。 有人对正在发生的事情有什么建议吗? 编辑:代码..:

  • 问题内容: 我有一个JavaScript Ajax调用(jQuery.ajax),它不执行成功回调函数。 我在firebug中看到,该请求已发布,并且按预期返回了有关json的正确结果。怎么了? 问题答案: 很多次,我都遇到过类似的问题,大多数时候,原因是json格式错误。尝试以文本数据类型获取结果,看看这是否是您的问题。 另外,我想问一下您是否使用了“&jsoncallback =?”之类的参数

  • 我们使用的是spring Boot2,在集成测试中,我们需要在事务中手动执行一些代码,在事务结束时和断言之后,我们希望回滚该事务。 我们使用显式定义的事务而不是@Transactional,因为有时我们需要在Test2事务中执行。 你能告诉我如何在我们的例子中使用回滚来回滚这两个事务吗?这是我们维护的较老的代码,所以如果有可能在引导2中做得更好,我将非常感谢任何建议。我们只需要在一个测试中执行2个