回调函数的第一个参数是上一步传入的错误对象
Node约定,如果某个函数需要回调函数作为参数,则回调函数是最后一个参数。另外,回调函数本身的第一个参数,约定为上一步传入的错误对象。
原因
回调函数只要用于异步操作,当回调函数运行时,前期操作早就结束了,错误的执行栈早就不存在了,传统的错误捕捉机制try...catch对于异步操作行不通,所以只能把错误交给回调函数处理。
try {
db.User.get(userId, function(err, user) {
if(err) {
throw err
}
})
} catch(e) {
console.log(e)
}
回调函数运行时,try catch早就运行结束,导致错误无法捕捉。
所以,一旦异步操作发生错误,就把错误对象传递到回调函数。
如果没有发生错误,回调函数的第一个参数就传入 null。
iOS开发中,很多标准库也是采用相同的形式来传递错误。我们可以将之约定为代码开发规范。