我现在正在学习节点,我对错误的参数感到困惑。 我认为它应该是回调函数的第一个参数,但我在许多回调函数中都没有看到它。有谁可以向我解释一下?谢谢!
答案 0 :(得分:1)
特别是有许多不同类型的函数和回调函数。回调函数的Node.js标准是以下形式:
function(err, arg1, arg2, ...)
arg1
等仅在相关时出现,但err
参数始终是第一个。这与许多历史JavaScript代码相反,其中错误将是最后一个参数。
强制错误作为第一个参数的Node.js方法,即使没有错误也会使错误更容易忽略,你很少忘记声明该参数,并使其位置可预测。
现在这仅适用于通用回调的情况。也就是说,在某些情况下,调用函数将在将来的某个时刻触发单个回调。你会看到他们这样使用:
doStuff(function(err, successValue) { ... });
还有jQuery推广的风格,其中一个或多个的回调将根据操作的结果被触发:
doStuff({
success: function(successValue) { ... },
error: function(err) { ... },
timeout: function() { ... }
});
请注意,在这种情况下,您可能同时触发错误和超时回调。你没有义务填充所有这些。
这种方法的缺点是哪些方法被调用的不可预测性以及无意中两次处理某些内容的风险。
答案 1 :(得分:1)
error参数通常用于异步代码。 node errors
接受回调函数的大多数异步方法都将接受作为该函数的第一个参数传递的Error对象。如果第一个参数不为null并且是Error的实例,则会发生应该处理的错误。
app.get()
发送获取请求并返回错误,如404
你可以在res.status(404).render(
app.get()
的操作
错误处理函数有四个参数而不是三个:(err,req,res,next)
某些代码使用err作为第一个参数的原因是因为某些代码(如fs.readFile
)被编程为检查是否存在错误并进行处理。 API的作者专门编写了代码来检查错误的第一个参数并处理它。
这就是为什么有些方法无法用于其他方法的原因。
答案 2 :(得分:0)
首先:回调是只是一个功能。不同的回调有不同的用途。
通常,执行异步操作并应“返回”值的函数会传递一个回调函数,该函数将采用(至少)两个参数:第一个用于传递错误(如果有),第二个(用于传递应返回给调用者的值。
您注意到net.createServer()
也将采用回调函数,但该函数只有一个参数。
这是因为,在这种情况下,回调不用于传递错误和/或值。相反,它是在与服务器建立新连接时调用的函数。
这真的有点捷径。这段代码:
var server = net.createServer(function(connection) {
...
});
此代码的缩写:
var server = net.createServer();
server.on('connection', function(connection) {
...
});