用于计算机应用程序的异步操作处理方法和相应的系统与流程

专利2022-05-09  20



1.本发明涉及计算机应用程序领域,更具体而言,涉及一种用于计算机应用程序的异步操作处理方法、相应的系统、计算机设备以及计算机可读存储介质。


背景技术:

2.当前,计算机软件应用程序的前端技术日益复杂。大型应用程序的前端功能页面通常包括多个模块,每个模块通常又包括多个组件,一个功能的实现过程通常涉及组件间的相互调用以及与后端服务器的异步操作(例如,数据交互等)。因此,应用程序的前端功能页面的调用逻辑非常复杂。
3.由于1)异步操作与网络状态有关;以及2)后端进行了微服务化,不同服务器的响应时间不相同等原因,“后调用,先响应”的情况经常发生,前端组件在遇到这类问题时的状态或者行为经常会不正确,使得用户无法正常使用应用程序。另外,现有的状态管理机制重度依赖底层开发框架,无法做到跨平台、框架支持。
4.因此,需要一种改进的用于计算机应用程序的异步操作处理方案。


技术实现要素:

5.本发明的目的在于提供一种能解决或缓解上述问题至少之一的方案。
6.具体地,根据本发明的第一方面,提供一种用于计算机应用程序的异步操作处理方法,其包括:
7.在所述计算机应用程序内生成任务处理实例,所述任务处理实例包括执行器和任务队列;
8.将至少一个模块或组件的自身实例与所述任务处理实例绑定,以使得对所述至少一个模块或组件的调用被所述任务处理实例托管;
9.经由所述计算机应用程序接收对被托管的至少一个模块或组件的调用指令,响应于所述调用指令,生成相应的调用任务并且将生成的所述调用任务加入到所述任务处理实例的所述任务队列中;以及
10.所述任务处理实例的所述执行器按照调用顺序执行所述任务队列中的所述调用任务。
11.根据本发明的第二方面,提供一种用于计算机应用程序的异步操作处理系统,其包括处理器,所述处理器被配置为执行计算机指令以:
12.在所述计算机应用程序内生成任务处理实例,所述任务处理实例包括执行器和任务队列;
13.将至少一个模块或组件的自身实例与所述任务处理实例绑定,以使得对所述至少一个模块或组件的调用被所述任务处理实例托管;
14.经由所述计算机应用程序接收对被托管的至少一个模块或组件的调用指令,响应于所述调用指令,生成相应的调用任务并且将生成的所述调用任务加入到所述任务处理实
例的所述任务队列中;以及
15.使得所述任务处理实例的所述执行器按照调用顺序执行所述任务队列中的所述调用任务。
16.根据本发明的第三方面,提供一种计算机设备,其包括存储器和处理器,所述存储器上存储有计算机指令,所述计算机指令在由所述处理器执行时导致上述的异步操作处理方法被执行。
17.根据本发明的第四方面,提供一种非暂时性计算机可读存储介质,其上存储有计算机指令,所述计算机指令在由处理器执行时导致上述的异步操作处理方法被执行。
18.利用本发明的方案,能通过生成任务处理实例来由任务处理实例托管对至少一个模块或组件的调用,进而可以使对组件的调用和组件内涉及的异步操作有序并且可控。如此,有助于最大限度地排除多个组件的多次调用时触发的异步操作的结果先后顺序的不确定性,保证计算机应用程序的前端组件的状态或者行为稳定,同时本发明不依赖底层开发框架,可以做到跨平台、框架支持。
附图说明
19.以示例的方式参考以下附图描述本发明的非限制性且非穷举性实施例,其中:
20.图1是示意性示出根据本发明一实施例的用于计算机应用程序的异步操作处理方法的流程图;
21.图2是示意性示出根据本发明一实施例的任务处理实例处理异步操作的过程的示意图。
具体实施方式
22.为了使本发明的上述以及其他特征和优点更加清楚,下面结合附图进一步描述本发明。应当理解,本文给出的具体实施例是出于向本领域技术人员解释的目的,仅是示例性的,而非限制性的。
23.总体而言,本发明的方案适用于各种在计算机应用程序中响应于用户的相关操作处理计算机应用程序内的异步操作的情形。所述异步操作例如但不限于模块内涉及的异步操作、或者组件内涉及的异步操作等,所述异步操作是由于用户对计算机应用程序进行的操作所引起的。所述计算机应用程序包括例如但不限于浏览器应用程序、财务软件、办公软件等。
24.所述计算机应用程序可以是使用各种编程语言所实现的应用程序,其前端功能页面可以是使用各种编程语言所实现的前端功能页面。所述计算机应用程序可以是安装在用户终端设备上的软件、输入网址使用浏览器打开的计算机应用程序等。所述用户终端设备的示例可以包括例如但不限于台式计算机、膝上型计算机、个人数字助理或者手机等。根据具体的情形,与用户交互的数据的数据来源可以是本地数据来源,或可访问的远程数据来源。本地数据来源可以位于用户终端设备的存储器中。远程数据来源包括不在用户终端设备本地的、用户终端设备可通过各种通信方式访问的数据来源,所述通信方式例如移动网络(4g或者5g)或者wi

fi等。
25.图1示意性示出根据本发明一实施例的用于计算机应用程序的异步操作处理方法
100。方法100可以包括步骤s110、步骤s120、步骤s130和步骤s140。
26.在步骤s110,在所述计算机应用程序内生成任务处理实例,所述任务处理实例包括执行器和任务队列(或者称为“等待队列”)。例如,在所述计算机应用程序的模块内涉及异步操作的情况下,在模块内生成任务处理实例;在所述计算机应用程序的组件内涉及异步操作的情况下,在组件内生成任务处理实例。所述任务处理实例可以使用与所述计算机应用程序相同的实现语言生成,生成方法为实现语言的生成新实例的语句。例如,在所述计算机应用程序的实现语言为javascript时,可以使用语句var taskqueue=new taskqueue()生成任务处理实例,其中taskqueue为可调用方法的对象(即实例),taskqueue为本文所述的异步操作处理方法提供的构造函数。具体地,任务处理实例可以是指代本文中的异步操作处理方法最终生成可供调用的对象,例如可以是构造函数或者说被提供给调用方的代码段。
27.在步骤s120,将所述计算机应用程序中的至少一个模块或组件的自身实例与所述任务处理实例绑定,以使得对所述至少一个模块或组件的调用被所述任务处理实例托管。例如,在所述计算机应用程序的模块内涉及异步操作的情况下,将模块内的多个组件的自身实例与所述任务处理实例绑定;在所述计算机应用程序的组件内涉及异步操作的情况下,将组件内的自身实例与所述任务处理实例绑定。在绑定之后,对所述至少一个模块或组件的调用被所述任务处理实例托管,所述任务处理实例控制对所述至少一个模块或组件的调用。“绑定”是指需要调用的一方(例如有类似需求的模块/组件)将任务处理实例保存,以便在需要的时候调用。
28.在步骤s130,经由所述计算机应用程序接收对被托管的至少一个模块或组件的调用指令,响应于所述调用指令,生成相应的调用任务并且将生成的所述调用任务加入到所述任务处理实例的所述任务队列中。所述调用指令是由于用户对计算机应用程序的操作引起的,所述指令将相应地调用组件已执行用户期待的功能。所述调用任务是响应于所述调用指令调用模块内或组件内的方法而生成的,所述调用任务可以对应于对同一个组件的同一个方法的多次调用或者对不同组件的不同方法的调用。所述调用任务可以是同时产生的或在基本相同(例如,相差不超过数十秒)的时间内产生的。
29.在步骤s140,所述任务处理实例的所述执行器按照调用顺序执行所述任务队列中的所述调用任务。
30.在一实施例中,在所述调用任务加入到所述任务队列中时,调用方将得到处于未完成的状态的异步操作处理函数;和/或,在所述调用任务由所述执行器执行完成后,调用方将得到处于已经成功的状态的异步操作处理函数,并且所述执行器会在相应的调用任务执行完成后将所执行的调用任务的运行结果提供给所述异步操作处理函数。
31.例如,所述异步操作处理函数可以是promise实例,promise实例是一个容器,其中保存着未来才会结束的事件(例如,一个异步操作)的结果,promise实例共有三种状态:pending(未完成)、fulfilled(已经成功)和rejected(拒绝)状态,可以从promise实例获取异步操作的状态。promise实例的状态与异步操作的进行状态相关联,通过监控promise实例的状态,可以得知异步操作是否进行以及是否完成。在任务队列中有多个任务时,在每个任务中都有promise实例,可以使用promise实例反映每个任务的状态。
32.在一实施例中,当所述任务队列中的所述调用任务访问相同资源或其访问的资源
相互交叉时,所述执行器按照所述调用顺序逐个执行所有加入所述任务队列的所述调用任务,所述调用任务中的每一个的运行结果能够被提供给所述异步操作处理函数以返回给调用方。
33.例如,任务1是a=a 1,任务2是a=a 2,这两个任务访问数据库中所存储的相同的数据a,假设数据库中原始存储的a的初始值是1。执行器按照调用顺序先执行a 1,将a 1的运行结果2提供给所述异步操作处理函数并且返回给调用方,调用方将得到结果2;执行器按照调用顺序再执行a 2,将a 2的运行结果4提供给所述异步操作处理函数并且返回给调用方,调用方将得到结果4。
34.在另一实施例中,当所述任务队列中的所述调用任务访问的资源相对独立时,按照调用方法或预定义的配置对所有加入所述任务队列的所述调用任务进行分组,所述执行器按照所述分组并且根据所述分组内的调用顺序执行所述调用任务,每个分组中的最后一次执行的调用任务的结果被提供给所述异步操作处理函数以返回给调用方。
35.例如,任务1是a=a 1,任务2是a=a 2,任务3是b=b 1,这三个任务访问数据库中所存储的数据a或者b,假设数据库中原始存储的a的初始值是1,b的初始值是0。因为任务1和任务2都涉及变量a,因此任务1和任务2分为一组,任务3为另一组。执行器按照分组执行任务a=a 1、a=a 2,分组中的每个任务都会被执行,但是a 1的运行结果2不会被作为任务1的执行结果提供给所述异步操作处理函数并且返回给调用方,而是在分组内的所有任务(即,任务2)执行结束后将最终结果4作为任务1和任务2共同的最终执行结果,任务1的执行结果和任务2的执行结果都为4,调用方将得到结果4;执行器按照分组执行任务b 1,将b 1的运行结果1提供给所述异步操作处理函数并且返回给调用方,调用方将得到结果1。与上文所述的按照调用顺序的执行策略相比,通过分组方式的执行策略具有更好的执行效率,但是应用场景有限。
36.在另一实施例中,当所述执行器中有所述调用任务在执行时,所述任务处理实例处于忙碌状态;以及当所述任务队列中所有的所述调用任务都执行完成后,所述任务处理实例解除忙碌状态。
37.本文中的任务处理实例的默认状态是没有最长等待时间,即无限时长等待。但是使用者可以根据自身需求设定一个时长,该时长并无额外限制。例如,所述任务处理实例可以被设定一阈值时间(或者称为“最长等待时长”),以控制单个调用任务的执行不超过所述阈值时间,如果超过所述阈值时间则当前调用任务会被丢弃并且调用方将得到处于拒绝状态的异步操作处理函数。
38.例如,最长等待时长可以作为添加任务到任务队列时所调用方法的一个参数,如以下示例中的maxwaitingtime:taskqueue.addtask(task,context,maxwaitingtime)。
39.在再一实施例中,还可以基于所述任务处理实例的忙碌状态,调用方能够执行基于该忙碌状态的操作,其中,所述操作包括当调用方发现所述任务处理实例处于忙碌状态时放弃读取所述任务处理实例中的相应调用任务涉及的变量,因为该变量的当前值并非为最新值。
40.图2示意性示出根据本发明一实施例的任务处理实例处理异步操作的过程。
41.如图2所示,在计算机应用程序内生成任务处理实例,所述任务处理实例包括执行器和任务队列;将至少一个模块或组件的自身实例与所述任务处理实例绑定,以使得对所
述至少一个模块或组件的调用被所述任务处理实例托管;经由所述计算机应用程序接收对被托管的至少一个模块或组件的调用指令,响应于所述调用指令,生成相应的调用任务并且将生成的所述调用任务加入到所述任务处理实例的所述任务队列中;以及所述任务处理实例的所述执行器按照调用顺序执行所述任务队列中的所述调用任务。
42.在图2中,响应于调用指令生成4个调用任务task 0、task 1、task2和task 3,task 0正在执行器中被执行,task 1、task 2和task 3被加入到所述任务处理实例的所述任务队列中。如图2所示,执行器执行完task 0后,将提供真实运行结果,并且将按照调用顺序继续执行task 1。除了task 0、task 1、task 2和task 3以外,被加入任务队列的还有执行需要的参数与上下文(例如相关数据)。每个调用任务都包含promise实例以保存并反映异步操作的结果。另外,可以对多个调用任务和执行器进行状态监控。
43.本发明可以实现为一种用于计算机应用程序的异步操作处理系统,该系统包括处理器,该处理器被配置为执行计算机指令以执行本文上述的异步操作处理方法的部分或全部步骤。
44.具体地,所述处理器可以被配置为执行计算机指令以:
45.在所述计算机应用程序内生成任务处理实例,所述任务处理实例包括执行器和任务队列;
46.将所述计算机应用程序中的至少一个模块或组件的自身实例与所述任务处理实例绑定,以使得对所述至少一个模块或组件的调用被所述任务处理实例托管;
47.经由所述计算机应用程序接收对被托管的至少一个模块或组件的调用指令,响应于所述调用指令,生成相应的调用任务并且将生成的所述调用任务加入到所述任务处理实例的所述任务队列中;以及
48.使得所述任务处理实例的所述执行器按照调用顺序执行所述任务队列中的所述调用任务。
49.在一个实施例中,所述处理器还被配置为执行计算机指令以:
50.在所述调用任务加入到所述任务队列中时,使得调用方得到处于未完成的状态的异步操作处理函数;和/或
51.在所述调用任务由所述执行器执行完成后,使得调用方得到处于已经成功的状态的异步操作处理函数,并且使得所述执行器会在相应的调用任务执行完成后将所执行的调用任务的运行结果提供给所述异步操作处理函数。
52.在另一个实施例中,所述处理器还被配置为执行计算机指令以:
53.当所述任务队列中的所述调用任务访问相同资源或其访问的资源相互交叉时,使得所述执行器按照所述调用顺序逐个执行所有加入所述任务队列的所述调用任务,所述调用任务中的每一个的运行结果能够被提供给所述异步操作处理函数以返回给调用方。
54.根据本发明的又一方面,提供了一种计算机设备,其包括存储器和处理器,所述存储器上存储有可由处理器执行的计算机指令,所述计算机指令在由所述处理器执行时指示所述处理器执行本发明的用于计算机应用程序的异步操作处理方法的各步骤。该计算机设备可以广义地为服务器、终端,或任何其他具有必要的计算和/或处理能力的电子设备。在一个实施例中,该计算机设备可包括通过系统总线连接的处理器、存储器、网络接口、通信接口等。该计算机设备的处理器可用于提供必要的计算、处理和/或控制能力。该计算机设
备的存储器可包括非易失性存储介质和内存储器。该非易失性存储介质中或上可存储有操作系统、计算机程序等。该内存储器可为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口和通信接口可用于与外部的设备通过网络连接和通信。该计算机程序被处理器执行时执行本发明的用于计算机应用程序的异步操作处理方法的步骤。
55.根据本发明的再一方面,还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序在由处理器执行时导致本文上述的异步操作处理方法的步骤被执行。在一个实施例中,所述计算机程序被分布在网络耦合的多个计算机设备或处理器上,以使得所述计算机程序由一个或多个计算机设备或处理器以分布式方式存储、访问和执行。单个方法步骤/操作,或者两个或更多个方法步骤/操作,可以由单个计算机设备或处理器或由两个或更多个计算机设备或处理器执行。一个或多个方法步骤/操作可以由一个或多个计算机设备或处理器执行,并且一个或多个其他方法步骤/操作可以由一个或多个其他计算机设备或处理器执行。一个或多个计算机设备或处理器可以执行单个方法步骤/操作,或执行两个或更多个方法步骤/操作。
56.本领域普通技术人员可以理解,本发明的用于计算机应用程序的异步操作处理方法的全部或部分步骤可以通过计算机程序来指示相关的硬件如计算机设备或处理器完成,所述的计算机程序可存储于非暂时性计算机可读存储介质中,该计算机程序被执行时导致本发明的用于计算机应用程序的异步操作处理方法的步骤被执行。根据情况,本文中对存储器、存储、数据库或其它介质的任何引用可包括非易失性和/或易失性存储器。非易失性存储器的示例包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)、闪存、磁带、软盘、磁光数据存储装置、光学数据存储装置、硬盘、固态盘等。易失性存储器的示例包括随机存取存储器(ram)、外部高速缓冲存储器等。
57.以上描述的各技术特征可以任意地组合。尽管未对这些技术特征的所有可能组合进行描述,但这些技术特征的任何组合都应当被认为由本说明书涵盖,只要这样的组合不存在矛盾。
58.尽管结合实施例对本发明进行了描述,但本领域技术人员应理解,上文的描述和附图仅是示例性而非限制性的,本发明不限于所公开的实施例。在不偏离本发明的精神的情况下,各种改型和变体是可能的。

技术特征:
1.一种用于计算机应用程序的异步操作处理方法,其特征在于,包括:在所述计算机应用程序内生成任务处理实例,所述任务处理实例包括执行器和任务队列;将所述计算机应用程序中的至少一个模块或组件的自身实例与所述任务处理实例绑定,以使得对所述至少一个模块或组件的调用被所述任务处理实例托管;经由所述计算机应用程序接收对被托管的至少一个模块或组件的调用指令,响应于所述调用指令,生成相应的调用任务并且将生成的所述调用任务加入到所述任务处理实例的所述任务队列中;以及所述任务处理实例的所述执行器按照调用顺序执行所述任务队列中的所述调用任务。2.根据权利要求1所述的方法,其中,所述方法还包括:在所述调用任务加入到所述任务队列中时,调用方将得到处于未完成的状态的异步操作处理函数;和/或在所述调用任务由所述执行器执行完成后,调用方将得到处于已经成功的状态的异步操作处理函数,并且所述执行器会在相应的调用任务执行完成后将所执行的调用任务的运行结果提供给所述异步操作处理函数。3.根据权利要求1所述的方法,其中,所述方法还包括:当所述任务队列中的所述调用任务访问相同资源或其访问的资源相互交叉时,所述执行器按照所述调用顺序逐个执行所有加入所述任务队列的所述调用任务,所述调用任务中的每一个的运行结果能够被提供给所述异步操作处理函数以返回给调用方。4.根据权利要求1所述的方法,其中,所述方法还包括:当所述任务队列中的所述调用任务访问的资源相对独立时,按照调用方法或预定义的配置对所有加入所述任务队列的所述调用任务进行分组,所述执行器按照所述分组并且根据所述分组内的调用顺序执行所述调用任务,每个分组中的最后一次执行的调用任务的结果被提供给所述异步操作处理函数以返回给调用方。5.根据权利要求1所述的方法,其中,当所述执行器中有所述调用任务在执行时,所述任务处理实例处于忙碌状态;和/或当所述任务队列中所有的所述调用任务都执行完成后,所述任务处理实例解除忙碌状态。6.根据权利要求1所述的方法,其中,所述任务处理实例被设定一阈值时间,以控制单个调用任务的执行不超过所述阈值时间,如果超过所述阈值时间则当前调用任务会被丢弃并且调用方将得到处于拒绝状态的异步操作处理函数。7.根据权利要求5所述的方法,其中,所述方法还包括基于所述任务处理实例的忙碌状态,调用方能够执行基于该忙碌状态的操作,其中,所述操作包括放弃读取所述任务处理实例中的相应调用任务涉及的变量。8.一种用于计算机应用程序的异步操作处理系统,包括处理器,其特征在于,所述处理器被配置为执行计算机指令以:在所述计算机应用程序内生成任务处理实例,所述任务处理实例包括执行器和任务队列;将所述计算机应用程序中的至少一个模块或组件的自身实例与所述任务处理实例绑
定,以使得对所述至少一个模块或组件的调用被所述任务处理实例托管;经由所述计算机应用程序接收对被托管的至少一个模块或组件的调用指令,响应于所述调用指令,生成相应的调用任务并且将生成的所述调用任务加入到所述任务处理实例的所述任务队列中;以及使得所述任务处理实例的所述执行器按照调用顺序执行所述任务队列中的所述调用任务。9.根据权利要求8所述的系统,其中,所述处理器还被配置为执行计算机指令以:在所述调用任务加入到所述任务队列中时,使得调用方得到处于未完成的状态的异步操作处理函数;和/或在所述调用任务由所述执行器执行完成后,使得调用方得到处于已经成功的状态的异步操作处理函数,并且使得所述执行器会在相应的调用任务执行完成后将所执行的调用任务的运行结果提供给所述异步操作处理函数。10.根据权利要求8所述的系统,其中,所述处理器还被配置为执行计算机指令以:当所述任务队列中的所述调用任务访问相同资源或其访问的资源相互交叉时,使得所述执行器按照所述调用顺序逐个执行所有加入所述任务队列的所述调用任务,所述调用任务中的每一个的运行结果能够被提供给所述异步操作处理函数以返回给调用方。11.一种计算机设备,包括存储器和处理器,其特征在于,所述存储器上存储有计算机指令,所述计算机指令在由所述处理器执行时导致根据权利要求1至7中任一项所述的异步操作处理方法被执行。12.一种非暂时性计算机可读存储介质,其上存储有计算机指令,其特征在于,所述计算机指令在由处理器执行时导致根据权利要求1至7中任一项所述的异步操作处理方法被执行。
技术总结
提供用于计算机应用程序的异步操作处理方法和相应的系统、计算机设备和介质。该方法包括:在计算机应用程序内生成任务处理实例,任务处理实例包括执行器和任务队列;将至少一个模块或组件的自身实例与任务处理实例绑定,以使得对至少一个模块或组件的调用被任务处理实例托管;经由计算机应用程序接收对被托管的至少一个模块或组件的调用指令,响应于调用指令,生成相应的调用任务并且将生成的调用任务加入到任务处理实例的任务队列中;以及任务处理实例的执行器按照调用顺序执行任务队列中的调用任务。利用本发明,有助于排除多个组件的多次调用时触发的异步操作的结果先后顺序的不确定性,保证计算机应用程序的前端组件的状态或者行为稳定。的状态或者行为稳定。的状态或者行为稳定。


技术研发人员:潘柯华 刘庆龙
受保护的技术使用者:北京元年科技股份有限公司
技术研发日:2021.03.22
技术公布日:2021/6/25

转载请注明原文地址:https://doc.8miu.com/read-150350.html

最新回复(0)