应用于JavaScript的流程控制方法和装置制造方法及图纸

技术编号:14766040 阅读:74 留言:0更新日期:2017-03-08 10:24
本公开提供了应用于JavaScript的流程控制方法和装置。该方法包括:发起AJAX请求,获取数据并赋予一个或多个全局变量,其中,所述一个或多个全局变量是根据至少一个业务的触发事件所设置的;针对所述至少一个业务中的每个业务,监听根据该业务的触发事件所设置的全局变量,并且在根据该业务的触发事件所设置的全局变量发生变化时,触发该业务的执行。应用本公开,能够实现事件间接触发业务,有利于化简和解耦JavaScript的流程控制,在存在轮询的情况下,还有利于减少轮询次数,减轻内存的负担。

【技术实现步骤摘要】

本公开涉及互联网领域,尤其涉及一种应用于JavaScript的流程控制方法和一种应用于JavaScript的流程控制装置。
技术介绍
目前在JavaScript(简称JS)中,采用基于事件的触发机制,即事件触发业务,业务响应于事件,可利用回调函数执行业务逻辑。一个业务可能响应于多个事件,一个事件也可能触发多个业务,因此,在多个业务响应于多个事件的情况下,其控制逻辑往往非常复杂。此外,一些业务的执行,也可能引起某些事件状态的变化,进而触发其他业务,导致业务间彼此耦合相互控制,更加剧了流程控制的复杂度。这些因素可能导致在JS中最终实现的流程控制非常复杂而混乱,使得其实现难度增加,且非常容易出错,并导致代码的易读性和可维护性较差,在出错后难以调试。此外彼此耦合、错综复杂的流程控制牵一发动全身,使得技术人员难以对已实现的流程控制进行调整和升级。
技术实现思路
有鉴于此,本公开要解决的技术问题是在JavsScript中实现逻辑清晰、更易实现和维护的流程控制。为了解决上述技术问题,根据本公开的一个方面,提供了一种应用于JavaScript的流程控制方法,该方法包括:发起AJAX请求,获取数据并赋予一个或多个全局变量,其中,所述一个或多个全局变量是根据至少一个业务的触发事件所设置的;针对所述至少一个业务中的每个业务,监听根据该业务的触发事件所设置的全局变量,并且在根据该业务的触发事件所设置的全局变量发生变化时,触发该业务的执行。根据本公开的另一个方面,还提供了一种应用于JavaScript的流程控制装置,该装置包括:全局变量赋值单元,被配置为发起AJAX请求,获取数据并赋予一个或多个全局变量,其中,所述一个或多个全局变量是根据至少一个业务的触发事件所设置的;监听触发单元,被配置为针对所述至少一个业务中的每个业务,监听根据该业务的触发事件所设置的全局变量,并且在根据该业务的触发事件所设置的全局变量发生变化时,触发该业务的执行。本公开的各个方面,全局变量被设置作为事件和业务之间的间隔,业务只需监听全局变量是否变化而无需关心事件本身,改变了传统JS基于事件的触发机制,从事件直接触发业务改为事件间接触发业务,能够化简和解耦流程控制。而且,事件仅改变全局变量,而无需关心这些全局变量的变化将触发哪些业务,能够提高搬运数据的效率。根据本公开的应用于JS的流程控制,其控制逻辑清晰易读,便于实现和维护。根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。附图说明包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。图1示出了根据本公开的一个实施例的应用于JavaScript的流程控制方法的流程图。图2示出了根据本公开的一个实施例的应用于JavaScript的流程控制装置的结构框图。图3示出了本公开的另一个实施例的一种应用于JavaScript的流程控制设备的结构框图。图4示出了传统JS页面加载的流程控制示意图。图5示出了传统JS页面加载中彼此耦合的业务的流程控制示意图。图6示出了根据本公开的JS页面加载的流程控制示意图。图7示出了根据本公开的加载播放页面的非核心模块的示意图。图8示出了根据本公开的基于AJAX轮询的弹幕业务的流程控制示意图。图9示出了传统JS中基于AJAX轮询的多业务的流程控制示意图。图10示出了根据本公开的基于AJAX轮询的多业务的流程控制示意图。具体实施方式以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。此处,先对本公开的基本原理进行简单介绍。设窗口中存在3个元素A、B、C,均呈现白色,当前需求是:当窗口变大且大于200px(pixel,像素)的时候,要求A变成红色,B变成绿色,C变成紫色;当窗口宽度小于200px时候,要求A、B、C均呈现白色。按照传统的基于事件的触发机制,实现上述需求的伪代码如下:目前,JS中基本都是通过上述方法实现的。在有些情况下,如果符合特定条件,还可以考虑将AitemChange、BitemChange、CitemChange捏合在一个函数中。此时如果提出新的需求:要求D元素也能够随窗口大小的变化而变色,则可以参照使A、B、C元素变色的实现方式,新增函数DitemChange。但要,如果新增的需求越来越多怎么办?对象越来越多越来越复杂,windowChange函数会变得越来越庞大,维护和管理windowChange函数的技术人员会发现:这个函数中包括多个事件和多个业务逻辑,在维护过程中需要深入每个事件和业务逻辑的内部,一一确定事件和业务间的响应关系,工作量和工作难度都很大,并且极易出错,出错后还难以调试。甚至进一步地,提出需求:元素E,不但要求在窗口大于700px的时候变橘黄色,还要在A元素变色之后5秒钟后变色,按照上述的解决模式,不但要考虑windowChange函数,也要考虑AitemChange,因此需要把对E元素的控制写到两个函数里,使得控制逻辑更为复杂。专利技术人发现,基于事件的触发机制的本质是事件改变某些状态,而业务(通常以回调函数的形式)响应于这些状态的变化被执行,因此,可以考虑将触发业务的这些状态设置为全局变量,全局变量成为事件和业务间的间隔。从而,事件仅改变全局变量,而不关心这些全局变量的变化会触发哪些业务;业务仅关心可触发该业务的全局变量是否发生变化,而不关心事件本身。基于这一专利技术构思,实现上述需求的伪代码可被转换为:基于上述思路,一旦窗口大小被改变了,全局变量GlobalWindowchangeFlag即发生变化;而GlobalWindowchangeFlag一旦发生变化,立刻通知AitemChange、BitemChange、CitemChange、EitemChange等一系列的函数,来做出相应的响应。实施例1图1示出了根据本公开的一个实施例的应用于JavaScript的流程控制方法的流程图。本实施例中,该方法包括:步骤101,发起AJAX请求,获取数据并赋予一个或多个全局变量,其中,所述一个或多个全局变量是根据至少一个业务的触发事件所设置的;步骤103,针对所述至少一个业务中的每个业务,监听根据该业务的触发事件所设置的全局变量,并且在根据该业务的触发事件所设置的全局变量发生变化时,触发该业务的执行。本实施例中,全局变量被设置作为事件和业务之间的间隔,业务只需监听全局变量的变化而无需关心事件本身,改变了传统JS基于事件的触发机制,从事件直接触发业务改为事件间接触发业务,能够化简和解耦流程控制。而且,事件仅改变全局变量,而无需关心这些全局变量的变化将触发哪些业务,能够提高搬运数据的效率。本文档来自技高网...
<a href="http://www.xjishu.com/zhuanli/55/201610819490.html" title="应用于JavaScript的流程控制方法和装置原文来自X技术">应用于JavaScript的流程控制方法和装置</a>

【技术保护点】
一种应用于JavaScript的流程控制方法,该方法包括:发起AJAX请求,获取数据并赋予一个或多个全局变量,其中,所述一个或多个全局变量是根据至少一个业务的触发事件所设置的;针对所述至少一个业务中的每个业务,监听根据该业务的触发事件所设置的全局变量,并且在根据该业务的触发事件所设置的全局变量发生变化时,触发该业务的执行。

【技术特征摘要】
1.一种应用于JavaScript的流程控制方法,该方法包括:发起AJAX请求,获取数据并赋予一个或多个全局变量,其中,所述一个或多个全局变量是根据至少一个业务的触发事件所设置的;针对所述至少一个业务中的每个业务,监听根据该业务的触发事件所设置的全局变量,并且在根据该业务的触发事件所设置的全局变量发生变化时,触发该业务的执行。2.根据权利要求1所述的应用于JavaScript的流程控制方法,其中,所述监听根据该业务的触发事件所设置的全局变量包括:在浏览器支持原型函数Object.defineProperty的情况下,采用Object.defineProperty监听根据该业务的触发事件所设置的全局变量。3.根据权利要求2所述的应用于JavaScript的流程控制方法,其中,所述采用Object.defineProperty监听根据该业务的触发事件所设置的全局变量包括:针对基本数据类型,直接通过原型函数Object.defineProperty中的get方法和set方法进行监听。4.根据权利要求2所述的应用于JavaScript的流程控制方法,其中,所述采用Object.defineProperty监听根据该业务的触发事件所设置的全局变量包括:针对组合数据类型中的基础的ARRAY类型,通过原型函数Object.defineProperty中的value方法进行监听,并且,在value方法中调用用于改变ARRAY数据类型数据值的原型函数。5.根据权利要求2中所述的应用于JavaScript的流程控制方法,其中,所述采用Object.defineProperty监听根据该业务的触发事件所设置的全局变量包括:针对组合数据类型中的JSON类型和非基础的ARRAY类型,对其逐层递归分解直至所有元素均为基本数据类型或者组合数据类型中的基础的ARRAY类型,并对所述所有元素中的部分或全部进行监听;其中,针对基本数据类型,直接通过原型函数Object.defineProperty中的get方法和set方法进行监听;针对组合数据类型中的基础的ARRAY类型,通过原型函数Object.defineProperty中的value方法进行监听,其中,在value方法中调用用于改变ARRAY数据类型数据值的原型函数。6.根据权利要求1所述的应用于JavaScript的流程控制方法,其中,所述监听根据该业务的触发事件所设置的全局变量包括:在浏览器不支持原型函数Object.defineProperty...

【专利技术属性】
技术研发人员:史荣琦邢斐董京涛李明杰顾思斌潘柏宇谢菲
申请(专利权)人:合一智能科技深圳有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1