nodeJS的回调编程体验.docx_第1页
nodeJS的回调编程体验.docx_第2页
nodeJS的回调编程体验.docx_第3页
nodeJS的回调编程体验.docx_第4页
nodeJS的回调编程体验.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论