Node.JS 回调函数在请求已经结束之后是否会执行?

14 Dec 2015 Category: Developer

做PHP,程序都是顺序执行的,所谓回调函数,其本身也是顺序执行的。但是Node.js 本身是 回调函数是异步执行的。PHP中,如果请求结束,那么在改请求所执行的操作都结束了。那么 Node.js里呢。

我想用node.js搭建一个服务程序,然后采集其他站点的数据,因为很多站点的数据都需要js 解析。那么问题来了,我通过linux cron 定时访问node服务,node服务向我要采集的站点 发起网络请求,并在网络请求的回调中完成数据采集的操作。那我的node服务是要等待数据采 集完才给出请求反馈么?如果我需要在一次cron 访问中采集多个站点的数据,那么,等待这些 异步采集全部执行完再返回吗?如果我发起调用万采集函数之后,直接返回cron结果,通知 cron请求已经被执行了,已经发起的采集请求还会执行到回调函数里吗?这就是题目中的问题, Node.JS 回调函数在请求已经结束之后是否会执行?

当然,答案是肯定的(已经试验过了)。Node.js的异步进程(或线程,此处并不确定是哪个), 并不是随着浏览器的访问的结束而结束。每个http请求和http请求中所发起的其他操作都是 平级的,并没有从属关系,Node.js本身维护这些进程,因此除非node服务down了,否则回调 都会执行。

对比PHP,如果用PHP抓取多个页面,那么PHP就得等待所有抓取工作完成之后才能够通知执行人, 已经执行了抓取工作。但是,数据抓取本身就有很多的不确定性,如果人家更新了站点, 更新了域名,或者某个站点请求时间长都会造成PHP本身请求超时。但是Node.js 就可以完全非 阻塞的运行,只要发出抓取请求就可以通知执行者已经成功执行了抓取请求。