节点中的约定是将错误参数传递给异步操作:
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,这当然是完全正常的用法.