一种动态添加异步并返回最后添加异步结果的方法及装置制造方法及图纸

技术编号:35681847 阅读:16 留言:0更新日期:2022-11-23 14:24
本发明专利技术公开了一种动态添加异步并返回最后添加异步结果的方法及装置,涉及计算机技术领域。所述方法通过构建闭包并定义公有数组和公有异步,将要执行的promise异步通过调用方法依次添加并锁定,从而实现返回最后添加的promise异步的结果。开发者只需在每次有新promise异步需要按顺序执行时,探查储存闭包的变量是否存在;存在则将需要执行的promise异步依次调用存储此方法变量上的add方法添加进此方法,不存在则初始化闭包构建后再调用add方法;等待公有异步结果返回后清空存储此方法的变量,便统一进入异步结果处理逻辑即可,无需增加任何其他代码逻辑。无需增加任何其他代码逻辑。无需增加任何其他代码逻辑。

【技术实现步骤摘要】
一种动态添加异步并返回最后添加异步结果的方法及装置


[0001]本专利技术涉及计算机
,特别涉及一种动态添加异步并返回最后添加异步结果的方法及装置。

技术介绍

[0002]对于现有ES6 JavaScript语言,往往会出现多个异步promise按顺序依次执行,且只需要依次执行的最后一个异步所返回的结果的使用场景(如用户不停翻页获取数据)。但由于每个异步执行时间并不固定,所以异步返回结果的顺序并不会和执行顺序相同,最后返回结果的可能不是最后执行的异步,因此可能造成错误数据出现或错误数据堆叠的情况。
[0003]由于ES6 JavaScript的promise异步不能强行停止,promise自带的promise.race和promise.all功能既无法解决此问题,其接收的异步又是固定参数执行一次,不能持续添加。常规规避方法只能在promise异步返回数据后处理位置增加数据锁,再比对数据是否为最后一个异步发起的(如通过比对时间戳,数据id,hash等形式),判断是后锁死数据锁,让还没有返回结果的不需要的异步在返回结果后数据得不到处理。
[0004]由于业务逻辑里每种异步的后续结果处理逻辑都可能各不相同,这种处理方式不仅需要对每种后续结果处理逻辑都赋予一个不同的数据锁和比对用变量,也因为数据锁写入了处理逻辑内导致出现代码耦合,不利于数据处理逻辑的纯净性。

技术实现思路

[0005]本专利技术要解决的技术问题,在于提供一种动态添加异步并返回最后添加异步结果的方法及装置,通过构建闭包并定义公有数组和公有异步,将要执行的promise异步通过调用方法依次添加并锁定,从而实现返回最后添加的promise异步的结果。
[0006]第一方面,本专利技术提供了一种动态添加异步并返回最后添加异步结果的方法,包括:闭包构建过程以及异步执行过程;所述闭包构建过程用于构建初始化闭包,所述闭包用于响应add方法调用,增加promise异步成员且记住所有异步成员,同时有内部锁定状态,不会被销毁;所述闭包中定义一公有数组用于用于记录所有传入的promise异步,再定义一个属于所述闭包的公有异步,作为最后传入的promise异步状态的桥接;每当一个需要执行的promise异步传入后,通过定义在所述公有数组上的add方法,将所述promise异步执行完毕的后续逻辑定义为结束公有异步,即此promise异步的状态被桥接到了所述公有异步上,同时为此promise异步加入位于自身的数据锁,并锁死数组里最后一个promise异步的数据锁,最后将此promise异步加入到所述公有数组内并同时返回公有异步和add方法;所述异步执行过程包括:当有promise异步需要按顺序执行时,探查储存闭包的变量是否存在;若存在,则将需要执行的promise异步依次调用存储闭包的变量上的add方法;若不存在,则执行所述闭包构建过程,构建完成后返回一个公有异步和add方法,再调用add
方法将promise异步添加进公有数组并将状态桥接到公有异步;之后等待公有异步结果返回后清空存储所述闭包的变量。
[0007]进一步地,所述add方法支持链式调用,每一个新增的需要执行的promise异步都通过所述add方法依次加入所述公有数组中的所述公有异步之前。
[0008]进一步地,所述公有异步为promise异步,当最后一个加入的promise异步执行完成后,述公有异步只返回最后一个add进方法的promise异步的结果。
[0009]第二方面,本专利技术提供了一种动态添加异步并返回最后添加异步结果的装置,包括:闭包构建模块以及异步执行模块;所述闭包构建模块,用于构建初始化闭包,所述闭包用于响应add方法调用,增加promise异步成员且记住所有异步成员,同时有内部锁定状态,不会被销毁;所述闭包中定义一公有数组用于用于记录所有传入的promise异步,再定义一个属于所述闭包的公有异步,作为最后传入的promise异步状态的桥接;每当一个需要执行的promise异步传入后,通过定义在所述公有数组上的add方法,将所述promise异步执行完毕的后续逻辑定义为结束公有异步,即此promise异步的状态被桥接到了所述公有异步上,同时为此promise异步加入位于自身的数据锁,并锁死数组里最后一个promise异步的数据锁,最后将此promise异步加入到所述公有数组内并同时返回公有异步和add方法;所述异步执行模块,用于当有promise异步需要按顺序执行时,探查储存闭包的变量是否存在;若存在,则将需要执行的promise异步依次调用存储闭包的变量上的add方法;若不存在,则执行所述闭包构建模块,构建完成后返回一个公有异步和add方法,异步执行模块再调用add方法将promise异步添加进公有数组并将状态桥接到公有异步;之后等待公有异步结果返回后清空存储所述闭包的变量。
[0010]进一步地,所述add方法支持链式调用,每一个新增的需要执行的promise异步都通过所述add方法依次加入所述公有数组中的所述公有异步之前。
[0011]进一步地,所述公有异步为promise异步,当最后一个加入的promise异步执行完成后,所述公有异步只返回最后一个add进方法的promise异步的结果。
[0012]本专利技术至少具有如下技术效果或优点:通过构建闭包并定义公有数组和公有异步,将要执行的promise异步通过调用方法依次添加并锁定,可保证桥接到公有异步上的状态始终是数组里最后一个promise异步,而公有异步一定只返回最后一个add进方法的promise异步的结果;等待公有异步结果返回后清空存储此方法的变量,便统一进入异步结果处理逻辑即可,无需增加任何其他代码逻辑。
[0013]上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的具体实施方式。
附图说明
[0014]下面参照附图结合实施例对本专利技术作进一步的说明。
[0015]图1为本专利技术实施例一中方法的流程图;图2为本专利技术实施例二中装置的结构示意图。
具体实施方式
[0016]本专利技术通过提供提供一种动态添加异步并返回最后添加异步结果的方法及装置,通过构建闭包并定义公有数组和公有异步,将要执行的promise异步通过调用方法依次添加并锁定,从而实现返回最后添加的promise异步的结果,无需增加任何其他代码逻辑。
[0017]本申请实施例中的技术方案,总体思路如下:1、闭包构建JavaScript闭包是一种利用方法返回的匿名方法可以保留原方法作用域,不会随着原方法调用完毕而作用域被销毁的特性。利用这种特性可以构建一个随时能通过方法调用,增加promise异步成员且记住所有异步成员,同时有内部锁定状态,不会被销毁的方法。
[0018]2、内部状态闭包内部定义一个数组(下称公有数组)用以记录所有传入的promise,由于本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种动态添加异步并返回最后添加异步结果的方法,其特征在于,包括:闭包构建过程以及异步执行过程;所述闭包构建过程用于构建初始化闭包,所述闭包用于响应add方法调用,增加promise异步成员且记住所有异步成员,同时有内部锁定状态,不会被销毁;所述闭包中定义一公有数组用于用于记录所有传入的promise异步,再定义一个属于所述闭包的公有异步,作为最后传入的promise异步状态的桥接;每当一个需要执行的promise异步传入后,通过定义在所述公有数组上的add方法,将所述promise异步执行完毕的后续逻辑定义为结束公有异步,即此promise异步的状态被桥接到了所述公有异步上,同时为此promise异步加入位于自身的数据锁,并锁死数组里最后一个promise异步的数据锁,最后将此promise异步加入到所述公有数组内并同时返回公有异步和add方法;所述异步执行过程包括:当有promise异步需要按顺序执行时,探查储存闭包的变量是否存在;若存在,则将需要执行的promise异步依次调用存储闭包的变量上的add方法;若不存在,则执行所述闭包构建过程,构建完成后返回一个公有异步和add方法,再调用add方法将promise异步添加进公有数组并将状态桥接到公有异步;之后等待公有异步结果返回后清空存储所述闭包的变量。2.根据权利要求1所述的方法,其特征在于:所述add方法支持链式调用,每一个新增的需要执行的promise异步都通过所述add方法依次加入所述公有数组中的所述公有异步之前。3.根据权利要求1或2所述的方法,其特征在于:所述公有异步为promise异步,当最后一个加入的promise异步执行完成后,述公有异步只返回最后一个add进方法的promise异步的结果。4.一种动态添加异步并...

【专利技术属性】
技术研发人员:何志宏黎天浩
申请(专利权)人:北京智象信息技术有限公司
类型:发明
国别省市:

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

1