【问题标题】:Callback function variable order in "Interactive Data Visualization for the Web"“Web 的交互式数据可视化”中的回调函数变量顺序
【发布时间】:2018-12-15 10:36:55
【问题描述】:

在 Scott Murray 的“Web 的交互式数据可视化”的第 5 章中,他在提到回调函数时写道:“注意,错误必须是第一个参数,数据必须是第二个”。

为什么会这样?

【问题讨论】:

  • 这是相关的代码where d3 calls the callback。有趣的是,即使你只是将它定义为function(data)d3 已经用fixCallback 处理了这种情况。

标签: javascript d3.js visualization data-visualization


【解决方案1】:

我不知道 Murray 说的是什么回调函数。但这是在许多异步函数中使用的约定。

让我们把问题转过来。假设您正在调用其他人提供的函数fn。它可能来自代码的另一部分,来自 npm 模块的构造函数,等等。如果您尝试调用fn(b, a) 而不是fn(a, b),那将会非常错误。例如,如果fn = function(x, y) { return x - y; },则fn(2, 5) 将返回-3fn(5, 2) 将返回3

您的问题与相反的情况完全相同:您正在定义一个函数,而其他人正在调用它。异步函数的提供者已承诺以错误和数据作为参数调用您的回调,按此顺序。因此,如果您将第一个参数视为错误,将第二个参数视为数据,它将起作用。

没有什么能阻止人们创建异步函数来调用回调函数,数据作为第一个参数,错误作为第二个参数。但我不知道还有其他人这样做,所以如果有人这样做,那只会令人困惑且毫无意义。

【讨论】:

  • 谢谢! d3.csv("myfile.csv", function(error, data){ if(error){ console.log(error); } else{ dataset = data; } }); 那么在这种情况下,d3.csv 是在调用函数吗?并且 d3.csv 期望按该顺序接收(错误、数据)?
  • (一个温和的建议:如果您删除“我不是为了回答这个问题而购买这本书”,您的回答会显得更友好!)
  • 我不是故意不友好,但我还是删除了那部分。 “所以在这种情况下,d3.csv 正在调用该函数?”是的,d3 将导致调用您的回调函数(直接或通过 d3 依赖的其他模块)。 “并且 d3.csv 期望按该顺序接收(错误,数据)?”不,您的函数将从 d3.csv 以该顺序接收它们。 (我们不知道也不关心 d3 究竟是如何接收这些参数的。)
  • 啊,对,有道理。非常感谢您的帮助(以及使 stackoverflow 更友好)! :)
猜你喜欢
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 2016-01-09
  • 2012-03-23
  • 2016-10-04
  • 1970-01-01
相关资源
最近更新 更多