异步处理:
为什么需要异步处理?
当函数需要完成耗时的操作时(比如读取文件),需要等完成这个操作后才能往下进行,比如用户请求服务器,服务器读取文件时,就会造成 阻塞。所以需要异步处理函数。而对于像休眠这样不是异步处理的函数,就需要找到一个能代替休眠这个功能的异步处理函数。
node.js的异步处理
node.js支持异步处理,有特定的异步处理函数,当程序进行到这些函数时,因为耗费时间,node.js会先自动返回,接着处理下面的程序,而不管函数是否处理完,同时给函数一个回调函数参数,当函数处理完后将自动调用回调函数,通过回调函数返回需要的东西。(异步处理函数的参数都是定义好的,如读取文件函数:
fs.readFile('/etc/passwd', function (err, data) {
if (err) throw err;
console.log(data);
});
其中他的第二个规定参数就是个回调函数,而他返回给回调函数的就是‘data’即文件内容(自动把文件内容传给data);
想要通过return来返回需要的东西是不行的,因为异步处理还没处理完函数就返回了,得不到想要的东西。所以对于异步处理函数(不包括普通函数,普通函数不需要异步处理,因为不耗费时间,所以node中有特定的异步函数),必须要有回调函数才能得到想返回的东西。
node是单进程,所以用户在node下请求服务器,每次请求都需要等上次处理完,所以需要异步处理。
function onRequest(request, response)
{
var pathname = url.parse(request.url).pathname;
console.log("Request for " + pathname + " received.");
route(handle, pathname, response);
}
http.createServer(onRequest).listen(8888);
这也是个异步处理函数,监听8888端口,每当用户请求时,把回调函数做为参数传给createServer函数,函数处理完通过onRequest回调函数返回值。