基于Javascript的异步编程分析

摘要:异步编程带来的问题在客户端javascript中并不明显,但随着服务器端Javascript越来越广的被使用,大量的异步10操作使得该问题变得明显。许多不同的方法都可以解决这个问题,本文针对此问题讨论了一些方法。关键词:异步编程;Javascript;异步10中图分类号:TP311文献标识码:A文章编号:1009-3044(2015)13-0080-02Abstract:AsynchronousprogrammingproblemscausedbytheclientJavascriptisnotobvious,butwiththeserver-sideJavascriptisusedmorewidely,alargenumberofasynchronous10operationsothattheproblembecomesapparent.Manydifferentmethodscansolvethisproblem,thispaperdiscussessomeofthewaysthisproblem.Keywords:AsynchronousProgramming;Javascript;Asynchronous101JavaScript异步编程简述异步指的是函数的调用并不直接返回执行的结果,而往往是通过回调函数异步的执行。回调函数,其实就是调用用户提供的函数,该函数往往是以参数的形式提供的。回调函数并不一定是异步执行的。varfn=function(callback){//dosomethingherecallback.apply(this,para);};varmycallback=function(parameter){//dosometingincustomercallback};//callthefnwithcallbackasparameterfn(mycallback);上述的例子中,回调函数是被同步执行的。大部分语言都支持回调,C++可用通过函数指针或者回调对象,java—般也是使用回调对象。在Javascript中有很多通过回调函数来执行的异步调用,例如setTimeout()或者setlnterval()setTimeout(function(){console.log("thiswillbeexectuedafter1second!上例中,sefTimeout直接返回,匿名函数会在1000毫秒后异步触发并执行,完成打印控制台的操作。也就是说在异步操作的情境下,函数直接返回,把控制权交给回调函数,回调函数会在以后的某一个时间片被调度执行。之所以要实现异步,则需要熟悉javascript的线程模型。2Javascript线程模型和事件驱动Javascript是单线程的,为了能实现异步执行,就需要明白Javascript在浏览器中的事件驱动(eventdriven)机制。事件驱动一般通过事件循环(eventloop)和事件队歹lj(eventqueue)来实现的。假定浏览器中有一个专门用于事件调度的实例,该实例可以是一个线程,我们可以称之为事件分发线程eventdispatchthread,该实例的工作就是一个不结束的循环,从事件队列中取出事件,处理所有很事件关联的回调函数(eventhandler)。注意回调函数是在javascript的主线程中运行的,而非事件分发线程中,以保证事件处理不会发生阻塞。通过事件驱动机制,可以想象javascript的编程模型就是响应一系列的事件,执行对应的回调函数。很多UI框架都采用这样的模型。异步的主要目的是处理非阻塞,在和HTML交互的过程中,会需要一些10操作,如果这些操作是同步的,就会阻塞其它操作,用户的体验就是页面失去了响应。由此可见」avascript通过事件驱动机制,在单线程模型下,以异步回调函数的形式来实现非阻塞的10操作。3Javascript异步编程的缺陷Javascript的单线程模型有很多好处,但同时也带来了很多问题。3.1代码可读性如果某个操作需要经过多个非阻塞的10操作,每一个结果都是通过回调如下所示:operationl(function<:err,result){operation2(function<:err,result){operation3(function<:err,result){operation4(function<:err,result){operations(function<:err,result){//dosomethinguseful})})})})})意大利面条式的代码很难维护。这样的情况更多的会发生在serverside的情况下。3.2流程控制异步带来的另一个问题是流程控制,例如要访问三个网站的内容,当三个网站的内容都得到后,合并处理然后发给后台。具体代码如下:varurls=['urll','url2','url3'];varresult=[];for(vari=0,len=urls.length();i

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?