Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodeJS回调错误参数_Node.js_Callback - Fatal编程技术网

Node.js nodeJS回调错误参数

Node.js nodeJS回调错误参数,node.js,callback,Node.js,Callback,我现在正在学习node,对err参数感到困惑。 我认为它应该是回调函数的第一个参数,但在很多回调函数中我看不到它。谁能给我解释一下吗?谢谢 首先:回调只是一个函数。不同的回调服务于不同的目的 通常,执行异步操作并应“返回”值的函数会被传递给一个回调函数,该回调函数将使用(至少)两个参数:第一个参数用于传递错误(如果有),第二个(和后面的)参数用于传递应返回给调用方的值 您注意到它也将接受回调函数,但该函数只有一个参数 这是因为,在本例中,回调不用于传递错误和/或值。相反,它是在与服务器建立新连接

我现在正在学习node,对err参数感到困惑。 我认为它应该是回调函数的第一个参数,但在很多回调函数中我看不到它。谁能给我解释一下吗?谢谢

首先:回调只是一个函数。不同的回调服务于不同的目的

通常,执行异步操作并应“返回”值的函数会被传递给一个回调函数,该回调函数将使用(至少)两个参数:第一个参数用于传递错误(如果有),第二个(和后面的)参数用于传递应返回给调用方的值

您注意到它也将接受回调函数,但该函数只有一个参数

这是因为,在本例中,回调不用于传递错误和/或值。相反,它是在与服务器建立新连接时调用的函数

这真是一条捷径。此代码:

var server = net.createServer(function(connection) {
  ...
});
是此代码的缩写:

var server = net.createServer();
server.on('connection', function(connection) {
  ...
});

有许多不同类型的函数,特别是回调函数。回调函数的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() { ... }
});
注意,在这种情况下,可能会同时触发错误和超时回调。您也没有义务填充所有这些


这种方法的缺点是不可预测调用哪一个,以及在无意中处理两次的风险。

错误参数通常用于异步代码。

大多数接受回调函数的异步方法都会接受作为该函数的第一个参数传递的错误对象。如果第一个参数不是null,并且是错误实例,则发生了应该处理的错误

app.get()
发送get请求并返回类似404的错误

您可以执行如下操作
res.status(404).render(
in
app.get()

错误处理函数有四个参数,而不是三个:(err、req、res、next)

某些代码使用err作为第一个参数的原因是,像
fs.readFile
这样的一些代码被编程用来检查是否存在错误并进行处理。API的作者专门编写代码来检查第一个参数是否存在错误并进行处理。
这就是为什么它对某些方法可用,而对其他方法不可用。

回调的标准节点回调形式
callback(err,result)
由节点库和试图与该样式保持一致的库使用。但是,库作者没有义务遵循它。因此,如果您正在查看userland代码,您可能会发现它正在使用,也可能不会发现它正在使用。您能否显示一些未使用它的示例?例如,在使用某些模块时:var net=require('net');var server=net.createServer(函数(连接){connection.on('end',function(){console.log('client disconnected');});});“谢谢!但我注意到在express中,err参数不经常使用。像下面这样简单的代码:var express=require('express');var app=express();app.get('/',function(req,res){res.send('Hello World');}),为什么回调不会出错?