为什么 Node.js 中的回调几乎总是将错误作为第一个参数?
Why callbacks in Node.js almost always take an error as their first argument?
如下代码所示:
var fs = require('fs');
fs.readFile('somefile.txt', function(err, data) {
if(err) {
return console.error(err);
}
console.log(data.toString('utf8'));
});
我知道如果发生错误我们可以很容易地捕捉到错误信息。
但是我想知道这种方法是如何一点一点演变的。
如果 pointer/article 能很好地解释它,我将不胜感激。
强制程序员不能偷懒忽略错误的设计选择
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) {/*...*/});
当然,这并不能阻止人们忽略错误。但至少它迫使他们写下参数,以便将来维护代码的程序员将被提醒缺少错误处理程序。
如下代码所示:
var fs = require('fs');
fs.readFile('somefile.txt', function(err, data) {
if(err) {
return console.error(err);
}
console.log(data.toString('utf8'));
});
我知道如果发生错误我们可以很容易地捕捉到错误信息。
但是我想知道这种方法是如何一点一点演变的。
如果 pointer/article 能很好地解释它,我将不胜感激。
强制程序员不能偷懒忽略错误的设计选择
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) {/*...*/});
当然,这并不能阻止人们忽略错误。但至少它迫使他们写下参数,以便将来维护代码的程序员将被提醒缺少错误处理程序。