【问题标题】:Idiomatic successful callback in Node.jsNode.js 中惯用的成功回调
【发布时间】:2014-05-04 16:06:36
【问题描述】:

按照 Node 中的约定,异步回调接受错误作为其第一个参数。在成功的情况下,第一个参数不能出现。我个人曾经写过

callback(undefined, result);

在这种情况下。但是,我在其他人的代码中看到了

callback(null, result);

盛行。它是否“正式”记录在任何地方?这两个选项中的哪个是惯用的节点?是否有任何重要的理由偏爱一个而不是另一个?

【问题讨论】:

  • 如果回调遵循检查该参数的惯用方式(即if (error)if (!error)),那么它没有任何区别。如果回调坚持严格检查(例如error === nullerror !== undefined),那么您必须首先传递它期望的值。
  • 是的,这更像是你如何定义 undefined 和 null 的含义。

标签: javascript node.js asynchronous idioms


【解决方案1】:

如果我们将“惯用的 Node”解释为“Node 本身所做的事情”,那么 null 就是惯用的。如果你在 Node 提示符(在 *nix 机器上)输入这个,你会得到 true:

require("fs").readFile("/dev/null", function (err) { console.log(err === null) })

我已尝试使用来自 fs 模块的其他回调并得到相同的行为。我没有测试 Node API 中使用回调的所有地方。

我没有找到说明在这种情况下节点必须err 设置为null 的参考。

【讨论】:

  • 当您可以查看 Node.js 源包(或 GitHub)的 lib/ 文件夹中任何这些模块的源代码时,我认为没有理由对其进行测试。
【解决方案2】:

如果您担心是否使用 null 与 undefined,请使用 null。严格来说在 JavaScript 中undefined 被认为是异常的。

您可以在What is the difference between null and undefined in JavaScript? 阅读更多信息。

还有一篇关于 Node.js 回调约定的好帖子 - http://blog.gvm-it.eu/post/22040726249/callback-conventions-in-node-js-how-and-why

【讨论】:

    【解决方案3】:

    如果出现错误,undefinednull 始终被视为相同。

    你可以同时使用它们。人们使用 null 只是因为它更短。

    如果您要检查错误,您可以使用if (err == null) { ... } 方法在一个语句中检查 null 和 undefined。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-07
      • 2014-01-18
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      相关资源
      最近更新 更多