为什么Node.js中的回调几乎总是将错误作为第一个参数?

时间:2015-03-19 07:32:39

标签: javascript node.js asynchronous callback

如下面的代码所示:

var fs = require('fs');
fs.readFile('somefile.txt', function(err, data) {
  if(err) {
    return console.error(err);
  }
  console.log(data.toString('utf8'));
});

据我所知,如果发生错误,我们可以轻松捕获错误信息。
但我想知道这种方法是如何逐渐演变的。
我会很感激任何可以解释它的指针/文章。

1 个答案:

答案 0 :(得分:0)

这是一种设计选择,迫使程序员不要懒惰并忽略错误。

Javascript允许您使用比指定的参数更少或更多的参数调用函数。例如:

function foo (a,b) {
    console.log(a,b);
}
foo(100); // not an error
foo(100,200,300); // also not an error

这意味着,如果将错误定义为第二个参数:

async(function (data,err) {/*...*/});

懒惰的程序员可能只是懒惰而忽略错误:

async(function (data) {/*...*/});

当然,这并不能阻止人们无视这种错误。但至少它迫使他们写下参数,以便维护代码的未来程序员将被提醒缺少错误处理程序。