




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
nodeJS的回调编程体验 在nodejs代码中,异步编程的直接体现就是回调。异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。下面只能说调用了IO 异步,然后用回调进行了数据处理。 1 . 读取http 是异步等待数据流 ,并在回调函数中进行处理数据 http.get(/, function (response) ); 当客户端发送请求并接收到完整的服务端响应头时,就会调用回调函数。在回调函数中,除了可以使用response对象访问响应头数据外,还能把response对象当作一个只读数据流来访问响应体数据 在下面函数里 1.1 在http.get 中我们传入回调函数 function (response) 进行处理 response 1.2 然后在回调函数 function (response) 里 又调用了 response.on事件详见机制 ,在事件 传入回调函数 由于在请求的响应数据流是json 格式,要想通过JSON.parse 分析数据,就需要等待数据全部获取,如果只是部分数据 ,则可能因为数据不全个出错。 因此在data 实际中 需要将数据合并起来 body.push(chunk); 。然后 在end 数据中对数据进行分心,并获取需要的数据。 1.3 而针对获取的数据 需要如何处理,也可以等待回调函数进行处理,所以在获取数据完毕后调用 callback(geoXY); function GetXYjson(addrstr, callback)try http.get(/sisserver?highLight=false&config=GOC&address=+addrstr+&resType=json&enc=utf-8&a_k=f519b1aee05755b300c69f742198d6749124bfbaf76b2ea6b45eff3bc8e4399188888d, function (response) var body = ;var geoXY=; console.log(Got response: + response.statusCode); /console.log(response.headers); response.on(data, function (chunk) body.push(chunk); /console.log(chunk.toString(utf8); ); response.on(end, function () console.log( jieguo num: %d,body.length);if (body.length1) body = Buffer.concat(body); /console.log(body.toString();try var jsonData = JSON.parse(body); /console.log(jsonDatalist); console.log(jsonDatalist.length); if (jsonDatalist.length0)geoXYaddress=addrstr; geoXYname=jsonDatalist0name; console.log(jsonDatalist0x); geoXYx=jsonDatalist0x;console.log(jsonDatalist0y);geoXYy=jsonDatalist0y;console.log( find Geo for num address:%s,addrstr); elsegeoXYaddress=addrstr; geoXYname=; geoXYx=0; geoXYy=0;console.log(can not find Geo for num address:%s,addrstr); catch(err)/ throw err; geoXYaddress=addrstr; geoXYname=; geoXYx=0; geoXYy=0;console.log(Error: %s,err.message); ;callback(geoXY); ); );catch(err)console.log(Error: %s,err.message); throw err; 2 . 处理多个http请求的响应数据值 2.1 从文件中读取请求值,通过data 事件 进行异步处理 ,传入回调函数,对请求值进行http 请求 2.2 调用上面单个Http请求 GetXYjson,并传入该函数的回电函数,在回电函数中逐个将获取的响应题的值 push 到一个对象,并在最后一个请求回调返回后,进行处理结果对象。如何处理,通过调用回掉函数 callback(geosObj); function GetXYSFromFileAsyc(src,callback)var rOption = flags: r,encoding: utf8,fd: null,mode: 0666,autoClose: true; var frs = fs.createReadStream(src,rOption);var geosObj=;frs.on(data, function(chunk)console.log(got %d bytes of data, chunk.length); var strLines=chunk.split(n); for(var i=0,size=strLines.length;i0) try/ 通过函数返回值 肯定是有问题的 因为GetXYjson 调用异步处理数据 / var oneGeo=GetXYjson(strLinesi);/geosObj.push(oneGeo);GetXYjson(strLinesi, function(oneGeo)geosObj.push(oneGeo); console.log(data %s: push XY ,JSON.stringify(oneGeo); console.log(geosObj len %D: ,geosObj.length);if ( geosObj.length=size )console.log(push end); callback(geosObj); ; ); catch(err)console.log(data%d: err:%s,i,err.message);continue; ); frs.on(end,function()console.log(readStream end); ); console.log(read end); / return geosObj; 3. 等待所有响应获取分析完毕后 ,进行统一写入文件处理 调用GetXYSFromFileAsyc函数进行文件处理,并传入回调函数,对响应值进行写入操作。 function writeGeoXYtoFile(src,dst)var wOption = flags: a,encoding: utf8,mode: 0666 ,autoClose: true ;var fws = fs.createWriteStream(dst,wOption); GetXYSFromFileAsyc(src, function(geosObj)fws.write(JSON.stringify(geosObj),utf8); / fws.write(Buffer.concat(geosObj),utf8); console.log(write end ); );/ 有问题 异步 和同步 有问题 向下代码 有问题,就是用同步的思想,处理异步函数调用/*var geosObj=;geosObj=GetXYSFro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025安徽铜仁市民族中学引进专业技术人才5人模拟试卷及答案详解(历年真题)
- 2025年漳州能源社会招聘模拟试卷及答案详解(名校卷)
- 2025年中国滑动护舷行业市场分析及投资价值评估前景预测报告
- 2025年春季内蒙古包头职教园区综合服务中心引进高层次和紧缺急需人才3人考前自测高频考点模拟试题及参考答案详解1套
- 2025年漳州市考试录用公务员集中考前自测高频考点模拟试题及完整答案详解1套
- 2025鄂尔多斯市伊金霍洛旗发展改革和科学技术局招聘公益性岗位人员的考前自测高频考点模拟试题及答案详解1套
- 2025年甘肃省平凉华亭市策底镇招聘专业化管理的村文书考前自测高频考点模拟试题及答案详解(新)
- 2025湖南省药品检验检测研究院招聘编外人员8人考前自测高频考点模拟试题有完整答案详解
- 2025湖北襄阳市中医医院(襄阳市中医药研究所)招聘急需专业技术人才55人考前自测高频考点模拟试题完整参考答案详解
- 2025湖北咸宁市通城城市发展建设投资(集团)有限公司第一期招聘考前自测高频考点模拟试题附答案详解(黄金题型)
- 《分布式光伏并网服务工作指引(试行)》2025
- 河北省2025-2026学年高一上学期9月月考测评英语试卷
- 叩开天宫之门-《中国人首次进入自己的空间站》课件 统编版语文八年级上册
- 2025年高级经济师《财政税收》真题卷及答案
- 物业租售业务培训课件
- 2025年工程勘察设计行业当前市场规模及未来五到十年发展趋势报告
- 《直播营销与运营》PPT商品选择与规划
- 贵阳区域分析
- 质量源于设计-QbD课件
- 仓储物流安全隐患排查表-附带法规依据
- 幼儿绘本故事:绘本PPT
评论
0/150
提交评论