node.js – 检查节点中的错误参数

节点中的约定是将错误参数传递给异步操作:

async.someMagicalDust(function(callback) {
     // some asynchronous task

     // […]
     callback();

}, function(err) {
     // final callback

    if(err) throw err;    
    // […]

});

也许我太天真了,但我从来不是if(变量)符号的忠实粉丝 – 可能是从C继承的,原因是have already been discussed many times in the past.

另一方面,我有时遇到一个null参数并且这个错误检查:

if(typeof err !== 'undefined' && err !== null)

有点太冗长了.

另一个解决方案是

if(err != null)

但我认为non-strict check可能很棘手,尽管我认为与null比较时它是正常的.

检查节点中错误参数的最佳方法是什么?

最佳答案 使用if(错误).

它旨在以这种方式使用.节点样式的回调应该仅在实际错误的情况下将错误设置为非虚假值.您将找不到任何将err设置为”或0以表示错误的合理示例.

就像YlinaGreed所指出的那样,如果模块约定从null到undefined从0到n甚至NaN,你仍然是安全的.我从来没有因为只使用if(错误)而受到打击.

另一方面,您可能想要使用coffescript,它会为您翻译

unless err? then...

if (typeof err === "undefined" || err === null) {

模仿最常见的模式.

一些链接来证实if(错误)方法:

> https://gist.github.com/klovadis/2548942
> http://caolanmcmahon.com/posts/nodejs_style_and_structure/(作者asola的Caolan McMahon)
> http://thenodeway.io/posts/understanding-error-first-callbacks/

约定似乎是传递一个错误对象作为第一个参数,并且null为没有错误,所以即使你传递一个空对象,它仍然是一个错误.

如果你使用流行的快速框架,你应该使用下一个回调从中间件返回,中间件遵循errback约定.

我相信大多数人更喜欢简洁的next()而不是next(null),这意味着第一个参数将评估为undefined而不是null,这当然是完全正常的用法.

点赞