NodeJS的异步编程风格.pdf

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NodeJS的异步编程风格

页码,1/5 NodeJS运行环境因其支持Javascript语言和异步编程受到开发社区越来越多的关注。从GitHub上的访问量来 看,NodeJS项目的关注度在最近几个月已经超过了Ruby及RoR 。作为一个新鲜的平台,开发人员开始尝试 去接触并运用于实际工作中,比如LinkedIn、Yammer、GitHub 、淘宝等企业已经在生产环境中部署了 NodeJS应用。不过,在学习NodeJS 的过程中,从同步编程到异步编程风格的转换是开发人员面临的一个 要问题,我们如何去适应呢?技术社区在讨论这种转变,专家Marc Fasel也撰写了精彩的文章来阐述该问 题,本文尝试结合Marc Fasel 的指导思想和笔者的实践经验来介绍一些NodeJS 的异步编程风格,希望对 NodeJS 的初学者有所启发。 第一个例子,读取目录信息 说起NodeJS 的异步编程,我们必须提到回调函数(callback ),纵览NodeJS 的API文档,满眼的回调函数说 明,在其他的编程语言中,也会存在一些异步的回调函数模型,但是没有NodeJS这样的大范围应用。这些 回调函数应用在异步函数中,作为其参数,当异步函数触发某事件时(如http 响应返回)即调用该回调函数 做进一步操作。NodeJS也提供了一些传统的同步函数,即应用程序必须等待该函数返回,才会执行 面的 代码。而异步函数则不同,应用程序在调用异步函数 会立即返回,执行 面的代码,至于异步函数的处 理则交给回调函数来做。例如,在NodeJS 中存在两个获取目录信息的函数,分别是同步的readdirSync()和 异步的readdir() 。看下面的代码片段 (源于Marc Fasel,略作改动): // 同步 filenames = fs.readdirSync(.); for (i = 0; i filenames.length; i++) { console.log(filenames[i]); } console.log(Current uid: + process.getuid()); //异步 fs.readdir(., function (err, filenames) { var i; for (i = 0; i filenames.length; i++) { console.log(filenames[i]); } }); console.log(Current uid: + process.getuid()); 请注意看,在同步函数的代码中,没有什么特别之处,应用程序会按顺序打印当前目录包含的文件名,然 后再打印当前进程的用户ID,其实际运行结果也如我们所料。而在异步函数的代码中,我们把打印文件名 的代码放在了readdir函数参数里的回调函数中,这样当readdir获取目录信息之后就调用该回调函数打印文 件名。但是应用程序在调用了异步函数fs.readdir(., function (err, filenames) )之 ,会立即执行 面打印进 程用户ID 的代码,不会停下来等待readdir函数返回。这就是异步与同步的差别,实际的运行结果也与之前 不同,异步函数的执行和回调函数的处理总需要一些时间,所以在很大程度上应用程序会首先打印出进程 用户ID,再打印出文件名。在通常的测试环境中,结果也是这样。从这个例子中,我们可以学到两点:一 是在异步编程中,需要把依赖于异步函数(需要其执行结果或者达到某种状态)的代码放在对应的回调函 数中;二是异步函数 面的代码会立即执行,所以在编程时需要通盘考虑,以免出现意外之外的运行结 果。 第二个例子,统计所有文件字节数 刚才的例子是一个简单的顺序执行逻辑,如果异步函数包含在循环中会是什么样子?就会出现若干异步函 数在并发运行的情况,开发人员需要这些异步函数共同完成一项任 的话,如何协作? 看到这里,读者的 脑海里可能会马上浮现出其他编程语言中线程并发的代码。现在来看第二个NodeJS示例,计算当前目录中 所有文件占用的总字节数。该例子用到的是同步函数statSync()和异步函数stat(),它们可以获取文件的基本 信息。先来看看各自的代码片段 (源于Marc Fasel,略作改动): // 同步

文档评论(0)

jiupshaieuk12 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档