Javascript Node.js中惯用的成功回调

Javascript Node.js中惯用的成功回调,javascript,node.js,asynchronous,idioms,Javascript,Node.js,Asynchronous,Idioms,根据节点中的约定,异步回调接受错误作为其第一个参数。如果成功,第一个论点不得出现。我个人过去常常写作 callback(undefined, result); 那样的话。然而,我在其他人的代码中看到 callback(null, result); 占主导地位。是否在任何地方“正式”记录?这两个选项中哪一个是惯用节点?有什么重要的原因可以选择一个而不是另一个吗?如果您关心是否使用null和undefined,那么选择null。严格来说,在JavaScript中,未定义的被认为是不正常的 你可以

根据节点中的约定,异步回调接受错误作为其第一个参数。如果成功,第一个论点不得出现。我个人过去常常写作

callback(undefined, result);
那样的话。然而,我在其他人的代码中看到

callback(null, result);

占主导地位。是否在任何地方“正式”记录?这两个选项中哪一个是惯用节点?有什么重要的原因可以选择一个而不是另一个吗?

如果您关心是否使用null和undefined,那么选择null。严格来说,在JavaScript中,未定义的
被认为是不正常的

你可以在网站上阅读更多关于这方面的内容

还有一篇关于Node.js回调约定的文章-。

如果我们将“惯用节点”解释为“节点本身的功能”,那么
null
就是惯用的。如果在节点提示下(在*nix机器上)键入此项,将得到
true

require("fs").readFile("/dev/null", function (err) { console.log(err === null) })
我尝试了来自
fs
模块的其他回调,得到了相同的行为。我还没有测试Node的API中使用回调的所有地方


我没有找到一个引用,该引用说明在这种情况下节点必须将
err
设置为
null

在出现错误的情况下,
未定义的
null
始终被认为是相同的

两者都可以使用。人们使用null仅仅是因为它较短


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

如果回调遵循检查该参数的惯用方法(即
If(error)
If(!error)
),则没有任何区别。如果回调坚持严格检查(例如
错误===null
错误!==undefined
),然后你必须首先传递它所期望的值。是的,这更像是定义undefined和null的含义。如果你只需查看Node.js源代码包(或GitHub上)的
lib/
文件夹中任何这些模块的源代码,我看不出有任何理由对其进行测试。