掌桥专利:专业的专利平台
掌桥专利
首页

Lua语言的异步处理方法、装置、计算机设备和存储介质

文献发布时间:2023-06-19 09:43:16


Lua语言的异步处理方法、装置、计算机设备和存储介质

技术领域

本申请涉及互联网技术领域,特别是涉及一种Lua语言的异步处理方法、装置、计算机设备和存储介质。

背景技术

Lua语言是一个小巧的脚本语言,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译和运行。

随着互联网程序技术的发展,出现了异步处理技术,异步处理是按照不同步的方式进行程序处理,传统的异步处理方式有回调、事件监听,都是将回调方法索引传入异步处理中,当异步处理结束后,调用传入的回调方法。

然而,传统技术中,针对Lua语言的异步处理方法没有广泛的实现,而且在多个异步回调串联时,代码会陷入臃肿回调代码中,增加了后期维护成本。

发明内容

基于此,有必要针对上述技术问题,提供一种能够降低维护成本的Lua语言的异步处理方法、装置、计算机设备和存储介质。

一种Lua语言的异步处理方法,所述方法包括:

主线程获取业务数据中产生的异步请求;

所述主线程根据所述异步请求启动协程,并由协程将所述业务数据上传至服务器;

所述协程接收所述服务器返回的对所述业务数据的处理结果;

所述主线程调用封装的异步回调函数从所述协程中回调所述处理结果,并根据所述处理结果更新所述业务数据。

在其中一个实施例中,封装的异步回调函数采用帧回调函数,该帧回调函数中包含帧循环,该帧循环通过在主线程中按照预设时间间隔循环执行预设代码片段而实现。

在其中一个实施例中,主线程调用封装的异步回调函数从协程中回调所述处理结果,包括:

在所述协程执行异步操作接收处理结果之后,主线程调用帧回调函数,利用帧回调函数中的帧循环检查promise状态,根据检测的所述Prmise状态从所述协程中回调所述处理结果。

在其中一个实施例中,执行预设代码片段包括:

检查promise状态;

调用promise链式回调;

当promise状态为完成状态时,调用promise链式回调,将异步操作的处理结果作为参数进行传递;

当promise状态为拒绝状态时,调用promise链式回调,将异步操作产生的错误作为参数进行传递,并删除异步操作中被取消的异步错误。

在其中一个实施例中,删除异步操作中被取消的异步错误包括:

通过cancel接口删除异步操作中被取消的异步错误。

在其中一个实施例中,该方法还包括;

在所述协程向所述服务器发送请求后,暂停协程,在所述服务器返回的对所述业务数据的处理结果之后,继续协程。

在其中一个实施例中,该方法还包括:

在检测到主动中断异步操作的情况下,中断所述业务协程,并中断该协程所有调用堆栈的协程。

一种Lua语言的异步处理装置,所述装置包括:

启动模块,用于主线程获取业务数据中产生的异步请求;

请求模块,用于所述主线程根据所述异步请求启动协程,并由协程将所述业务数据上传至服务器;

接收模块,用于所述协程接收所述服务器返回的对所述业务数据的处理结果;

更新模块,用于所述主线程调用封装的异步回调函数从所述协程中回调所述处理结果,并根据所述处理结果更新所述业务数据。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

主线程获取业务数据中产生的异步请求;

所述主线程根据所述异步请求启动协程,并由协程将所述业务数据上传至服务器;

所述协程接收所述服务器返回的对所述业务数据的处理结果;

所述主线程调用封装的异步回调函数从所述协程中回调所述处理结果,并根据所述处理结果更新所述业务数据。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

主线程获取业务数据中产生的异步请求;

所述主线程根据所述异步请求启动协程,并由协程将所述业务数据上传至服务器;

所述协程接收所述服务器返回的对所述业务数据的处理结果;

所述主线程调用封装的异步回调函数从所述协程中回调所述处理结果,并根据所述处理结果更新所述业务数据。

上述Lua语言的异步处理方法、装置、计算机设备和存储介质,通过主线程获取到业务数据中产生的异步请求,并根据该请求启动协程,同时由协程将业务数据上传至服务器,服务器端对上传的业务数据进行处理,处理结束后,由协程接收服务器返回的对业务数据的处理结果,同时主线程调用封装的异步回调函数从协程中回调处理结果,并根据处理结果更新业务数据,业务数据更新后即可根据更新了的业务数据更新相应的业务,该方法实现了在业务需要进行异步处理时,通过协程处理异步操作,主线程调用异步操作的处理结果,主线程不会陷入臃肿的回调中,降低了维护成本,并且提升了整体代码的可读性,降低了运行中的bug率,更加方便业务的开发。

附图说明

图1为一个实施例中Lua语言的异步处理方法的应用环境图;

图2为一个实施例中Lua语言的异步处理方法的流程示意图;

图3为一个实施例中Lua语言的异步处理的逻辑流程示意图;

图4为一个实施例中传统回调处理方式的示意图;

图5为一个实施例中promise处理方式的示意图;

图6为一个实施例中Lua语言的异步处理装置的结构框图;

图7为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的Lua语言的异步处理方法,可以应用于如图1所示的应用环境中。其中,终端102通过将业务数据上传至服务器104,实现与服务器104的交互。其中,终端102可以但不限于是各种个人计算机、笔记本电脑平板电脑,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一个实施例中,如图2所示,提供了一种Lua语言的异步处理方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤:

步骤S202,主线程获取业务数据中产生的异步请求。

当程序启动时立刻开始运行的线程被叫做程序的主线程。

具体地,在主线程中首先接收业务数据,其中业务数据可以是用户数据、行为数据、商品数据等,该业务数据主要用于实现程序的目的业务要求;获取到业务数据后,主线程还会产生异步请求,该异步请求可以是登录、游戏中的触发技能等。

步骤S204,主线程根据异步请求启动协程,并由协程将业务数据上传至服务器。

具体地,在主线程获取到异步请求后,通过该异步请求,触发启动协程的指令,协程即被启动,上述协程是一种类似线程,但比线程更轻量级并且完全由程序控制的存在。请求启动协程的同时,由协程将业务数据上传至服务器,由服务器对该业务数据进行处理,该处理操作包括对数据进行分类、分流、计算等操作。

步骤S206,协程接收服务器返回的对业务数据的处理结果。

具体地,当服务器完成对业务数据的处理后,会生成对应的处理结果,该结果会返回到协程中,由协程对服务器对数据处理后的处理结果进行接收,上述处理结果可以是登陆成功、或者是游戏中的技能触发成功等。

步骤S208,主线程调用封装的异步回调函数从协程中回调处理结果,并根据处理结果更新业务数据。

具体地,当协程接收到服务器返回的对业务数据的处理结果后,需要通过封装的异步回调函数将处理结果回调至主线程中,主线程根据调回的处理结果,对主线程中的程序继续运行,进而得到程序运行后更新了的业务数据。上述异步回调函数主要用于在异步结束时,对结果进行调用的操作,即调回主线程中,供主线程中的程序继续使用。

上述Lua语言的异步处理方法中,通过在主线程获取业务数据并产生异步请求,根据产生的异步请求启动协程,同时由协程将业务数据上传至服务器,并在服务器进行处理,当服务器对业务数据处理结束后,协程会接收到服务器返回的业务数据处理结果,该处理结果需传回主线程供程序继续运行,因此主线程采用封装的异步回调函数将协程中接收到的处理结果回调至主线程,主线程根据该结果对业务数据进行更新,并根据更新了的业务数据更新相应的业务。上述操作实现了在业务数据需要异步处理时,通过协程处理异步操作,主线程调用异步操作的处理结果,主线程不会陷入臃肿的回调中,降低了维护成本,并且提升了整体代码的可读性,降低了运行中的bug率,更加方便业务的开发。

在一个实施例中,封装的异步回调函数采用帧回调函数,该帧回调函数中包含帧循环,帧循环通过在主线程中按照预设时间间隔循环执行预设代码片段而实现。

具体地,在调用回调函数的时候,该函数采用帧回调函数,帧回调函数内置帧循环,该帧循环的操作发生在主线程,执行帧循环时,该循环会根据预设的时间间隔对预设代码进行循环操作,首先遍历所有promise状态,promise状态包括初始状态、操作完成状态、操作拒绝状态,接着根据遍历的promise状态进行响应处理,尤其当promise状态呈操作拒绝状态时会中断整个堆栈调用,由此减轻程序逻辑的复杂度。

在一个实施例中,主线程调用封装的异步回调函数从协程中回调处理结果,包括:

在协程执行异步操作接收处理结果之后,所述主线程调用帧回调函数,利用所述帧回调函数中的所述帧循环检查promise状态,根据检测的所述promise状态从所述协程中回调所述处理结果。

具体地,当协程接收到服务器返回的业务数据处理结果之后,该结果需要传回至主线程,而这个传回操作可以由调用回调函数执行,主线程调用帧回调函数,帧回调函数对promise的状态检查后,根据获取到的检查结果,如检查到promise呈现操作成功的状态(fulfilled),进而会将操作成功的处理结果调回至主线程;如果检查到promise呈现操作失败的状态(rejected),则将操作失败的处理结果调回至主线程。其中服务器对业务数据的处理操作可以是对数据进行分类、分流、计算等,分类可以是对不同数据类型进行分类,也可以是对数据优先级进行分类;分流通常用于数据量较大的情况,对数据进行分层、分流的区分;计算可以是在服务器上,根据预设的计算规则,对数据进行计算、分析或者判断操作。

在一个实施例中,上述执行预设代码片段包括:

检查promise状态;

调用promise链式回调;

当promise状态为完成状态时,调用promise链式回调,将异步操作的处理结果作为参数进行传递;

当promise状态为拒绝状态时,调用promise链式回调,将异步操作产生的错误作为参数进行传递,并删除所述异步操作中被取消的异步错误。

具体地,在帧循环中包含预设代码,并对预设代码执行循环操作,改代码首先遍历promise状态,判断promise的状态是初始状态(pending)还是从初始状态变成了操作完成状态(fulfilled)还是从初始状态变成了操作拒绝状态(rejected),如果promise状态为初始状态不调用链式回调;如果promise状态为完成状态(fulfilled),则调用promise链式回调,将异步操作的处理结果作为参数进行传递,传递至主线程需要该结果的程序中,进行后续程序的运行,最终完成程序逻辑的所有执行任务,例如promise状态由登录是否成功决定,那么当登陆成功时,promise状态即为操作完成状态(fulfilled),此时登录成功这个结果对应的数据则作为参数传递至需要这个结果才能后续运行的程序中;如果promise状态为拒绝状态(rejected),则调用promise链式回调,将异步操作产生的错误作为参数进行传递,传递至主线程需要该结果的程序中,进行后续程序的运行,最终完成程序逻辑的所有执行任务,但是在promise状态为拒绝状态(rejected)时,有的失败操作的结果不需要传回至程序继续运行,这种错误可以被做取消处理,并会在帧循环中将被取消的错误删除,执行删除操作后就不会影响程序的运行,提高了程序的运行效率。

在一个实施例中,删除异步操作中被取消的异步错误包括:

通过cancel接口删除所述异步操作中被取消的异步错误。

具体地,为了可以删除被取消的异步错误,在帧循环中添加了cancel接口,cancel可以在遇到不需要异常的时候,通过删除异步错误的操作,使得程序不会抛出异常,该操作可以解决主动中断异步的情况,例如网络超时,重试多次还是连不上服务器的时候,客户端会退出所有逻辑重新登录,该操作即为上述主动中断异步的情况,在这种情况下,则需要取消产生的异步错误,并且删除掉该取消信息。

在一个实施例中,上述方法还包括:

在协程向服务器发送请求后,暂停协程,在服务器返回的对所述业务数据的处理结果之后,继续协程。

具体地,在协程向服务器发送请求后,协程暂停,当服务器处理完业务数据,协程继续,由协程对该处理后的处理结果接收后,异步回调函数会将协程中接收到的结果调回至主线程中。

在一个实施例中,该方法还包括:

在检测到主动中断异步操作的情况下,中断业务协程,并中断该协程所有调用堆栈的协程。

具体地,当协程检测到主动中断异步操作的情况,如网络超时,重试多次还是连不上服务器的时候,客户端会发出退出所有逻辑并重新登录的指令,协程会检测到该指令,即检测到了主动中断异步操作的情况。在检测到主动中断异步操作的情况下,直接中断业务协程,并中断该协程所有调用堆栈的协程,该方法不仅实现了主动中断异步操作,还减轻了逻辑的复杂度,提高了代码的可读性。

在一个实施例中,如图3所示,在Lua语言的异步处理方法中,分为主线程和协程两部分,主线程用于执行程序的逻辑主体,协程用于辅助,当主线程接收业务数据,并产生异步请求后,则根据该异步请求启动协程,协程将业务数据上传至服务器,当服务器对业务数据处理结束,得到处理结果后,协程则接收服务器返回的对业务数据的处理结果,主线程再通过异步回调函数对处理结果进行回调,调回主线程程序继续运行,最终达到更新业务数据、用户交互、实现定时任务的目的,即程序逻辑执行结束。其中异步回调函数的实现为首先定义promise类的实现方式,其中包含promise的三种状态,分别是初始状态(pending),操作完成状态(fulfilled)以及操作拒绝状态(rejected),除此之外还包含用于跟回调函数对接的调用接口,如next、catch等,同时将全局方法封装进promise函数中,当服务器对业务数据的处理完成后,协程接收到的业务数据通过帧回调将处理结果调回至主线程,帧回调在完成回调操作依靠其中的帧循环,该帧循环包括遍历promise状态;调用promise链式回调函数以及删除取消的异步错误,最终主线程会根据回调回的业务数据处理结果,完成主线程中的业务数据的更新,进而得到更新后的业务。

在一个实施例中,如图4、图5所示,图4展示了传统的回调方式,图5展示了promise回调方式即异步回调方法,均以离开桌子、进入新桌子、更新桌子三步操作为例,传统的回调方式需要在执行完请求离开桌子、请求进入新桌子、刷新桌子全部过程后,才能完成数据传递的全过程,但是在异步回调的方式中,每经历一步都会有一个结果传回主线程中,即在完成请求离开桌子的操作后,对应的结果会立即传回主线程中,供主线程使用,无需等待三步全部按顺序执行完毕,才能得到结果,而且,如果需要中断操作的时候,promise方式也可以实现,但是传统的回调方式却不能实现,因此使用promise方法即异步回调处理方法不仅使业务实现更加方便,业务逻辑也更加清晰。

在Lua语言的异步处理方法中,首先将异步处理的逻辑和方法以Lua语言进行重新的编写,并且添加了全局的方法以及将全局方法进行封装的操作,将业务开发中常见的异步场景进行了Lua语言实现,对异步操作进行标准化的实现,使开发业务更加方便,减轻了逻辑的复杂度,也提高了代码的可读性,进而降低了对开发业务相应代码的维护难度。

应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图6所示,提供了一种Lua语言的异步处理装置,包括:启动模块602、请求模块604、接收模块606和更新模块608,其中:

启动模块602,用于主线程获取业务数据中产生的异步请求。

请求模块604,用于所述主线程根据所述异步请求启动协程,并由协程将所述业务数据上传至服务器。

接收模块606,用于所述协程接收所述服务器返回的对所述业务数据的处理结果。

更新模块608,用于所述主线程调用封装的异步回调函数从所述协程中回调所述处理结果,并根据所述处理结果更新所述业务数据。

上述Lua语言的异步处理装置中,在启动模块通过在主线程获取到业务数据并产生异步请求,在请求模块根据产生的异步请求启动协程,同时由协程将业务数据上传至服务器,并在服务器进行处理,当服务器对业务数据处理结束后,在接收模块协程会接收到服务器返回的业务数据处理结果,该结果需传回主线程供程序继续运行,因此主线程采用封装的异步回调函数将协程中接收到的处理结果回调至主线程,嘴周在更新模块中主线程根据该结果对业务数据进行更新。上述操作实现了在业务数据需要异步处理时,会通过主线程与协程的一个交互过程,完成业务数据的异步处理操作,同时采用封装的异步回调函数,增加了代码的可读性,减少运行中的错误率,使业务的开发更加方便,实现更加简单,减轻了逻辑的复杂度,也提高了代码的可读性,进而降低了对开发业务相应代码的维护难度。

在一个实施例中,在更新模块608中,主线程调用封装的异步回调函数从协程中回调处理结果,封装的异步回调函数采用帧回调函数,该帧回调函数中包含帧循环,帧循环通过在主线程中按照预设时间间隔循环执行预设代码片段而实现。

具体地,在调用回调函数的时候,该函数采用帧回调函数,帧回调函数内置帧循环,该帧循环的操作发生在主线程,执行帧循环时,该循环会根据预设的时间间隔对预设代码进行循环操作,首先遍历所有promise状态,promise状态包括初始状态、操作完成状态、操作拒绝状态,接着根据遍历的promise状态进行响应处理,尤其当promise状态呈操作拒绝状态时会中断整个堆栈调用,由此减轻程序逻辑的复杂度。

在一个实施例中,接收模块606接收处理结果之后,执行调用操作,主线程调用帧回调函数,利用所述帧回调函数中的所述帧循环检查promise状态,根据检测的所述promise状态从所述协程中回调所述处理结果。

具体地,当接收模块接收到服务器返回的业务数据处理结果之后,该结果需要传回至主线程,而这个传回操作可以由调用单元执行,通过主线程调用帧回调函数,帧回调函数对promise的状态检查后,根据获取到的检查结果,如检查到promise呈现操作成功的状态,进而会将操作成功的处理结果调回至主线程;如果检查到promise呈现操作失败的状态,则将操作失败的处理结果调回至主线程。

在一个实施例中,中执行预设代码片段包括:

检查promise状态;

调用promise链式回调;

当promise状态为完成状态时,调用promise链式回调,将异步操作的处理结果作为参数进行传递;

当promise状态为拒绝状态时,调用promise链式回调,将异步操作产生的错误作为参数进行传递,并删除所述异步操作中被取消的异步错误。

具体地,更新模块608中的帧循环中包含预设代码,并对预设代码执行循环操作,改代码首先遍历promise状态,判断promise的状态是初始状态还是从初始状态变成了操作完成状态还是从初始状态变成了操作拒绝状态,如果promise状态为初始状态不调用链式回调;如果promise状态为完成状态,则调用promise链式回调,将异步操作的处理结果作为参数进行传递,传递至主线程需要该结果的程序中,进行后续程序的运行,最终完成程序逻辑的所有执行任务,例如promise状态由登录是否成功决定,那么当登陆成功时,promise状态即为操作完成状态,此时登录成功这个结果对应的数据则作为参数传递至需要这个结果才能后续运行的程序中;如果promise状态为拒绝状态,则调用promise链式回调,将异步操作产生的错误作为参数进行传递,传递至主线程需要该结果的程序中,进行后续程序的运行,最终完成程序逻辑的所有执行任务,但是在promise状态为拒绝状态时,有的失败操作的结果不需要传回至程序继续运行,这种错误可以被做取消处理,并会在帧循环中将被取消的错误删除,执行删除操作后就不会影响程序的运行,提高了程序的运行效率。

在一个实施例中,上述更新模块608中删除异步操作中被取消的异步错误包括:

通过cancel接口删除所述异步操作中被取消的异步错误。

具体地,为了可以删除被取消的异步错误,在帧循环中添加了cancel接口,cancel接口可以在遇到不需要异常的时候,通过删除异步错误的操作,使得程序不会抛出异常,该操作可以解决主动中断异步的情况,例如网络超时,重试多次还是连不上服务器的时候,客户端会退出所有逻辑重新登录,该操作即为上述主动中断异步的情况,在这种情况下,则需要取消产生的异步错误,并且删除掉该取消信息。

在一个实施例中,接收模块中还包括:

在协程向服务器发送请求后,暂停协程,在服务器返回的对所述业务数据的处理结果之后,继续协程。

具体地,在协程向服务器发送请求后,协程暂停,当服务器处理完业务数据,协程继续,并在接收模块接收到处理结果后,异步回调函数会将协程中接收到的结果调回至主线程中,协程释放结果数据后,完成协程任务,协程随之停止。

在一个实施例中,该装置还包括暂停模块:

该暂停模块用于在检测到主动中断异步操作的情况下,中断业务协程,并中断该协程所有调用堆栈的协程。

具体地,当协程检测到主动中断异步操作的情况,如网络超时,重试多次还是连不上服务器的时候,客户端会发出退出所有逻辑并重新登录的指令,协程会检测到该指令,即检测到了主动中断异步操作的情况。在检测到主动中断异步操作的情况下,直接中断业务协程,并中断该协程所有调用堆栈的协程,该方法不仅实现了主动中断异步操作,还减轻了逻辑的复杂度,提高了代码的可读性。

关于Lua语言的异步处理装置的具体限定可以参见上文中对于Lua语言的异步处理方法的限定,在此不再赘述。上述Lua语言的异步处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储业务数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种Lua语言的异步处理方法。

本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:

主线程获取业务数据中产生的异步请求;

所述主线程根据所述异步请求启动协程,并由协程将所述业务数据上传至服务器;

所述协程接收所述服务器返回的对所述业务数据的处理结果;

所述主线程调用封装的异步回调函数从所述协程中回调所述处理结果,并根据所述处理结果更新所述业务数据。

在一个实施例中,处理器执行计算机程序时,封装的异步回调函数采用帧回调函数,该帧回调函数中包含帧循环,帧循环通过在主线程中按照预设时间间隔循环执行预设代码片段而实现。具体地,在调用回调函数的时候,该函数采用帧回调函数,帧回调函数内置帧循环,该帧循环的操作发生在主线程,执行帧循环时,该循环会根据预设的时间间隔对预设代码进行循环操作,首先遍历所有promise状态,promise状态包括初始状态(pending)、操作完成状态(fulfilled)、操作拒绝状态(rejected),接着根据遍历的promise状态进行响应处理,尤其当promise状态呈操作拒绝状态时会中断整个堆栈调用,由此减轻程序逻辑的复杂度。

在一个实施例中,处理器执行计算机程序时主线程调用封装的异步回调函数从协程中回调处理结果,包括:在协程执行异步操作接收处理结果之后,所述主线程调用帧回调函数,利用所述帧回调函数中的所述帧循环检查promise状态,根据检测的所述promise状态从所述协程中回调所述处理结果。具体地,当协程接收到服务器返回的业务数据处理结果之后,该结果需要传回至主线程,而这个传回操作可以由调用回调函数执行,主线程调用帧回调函数,帧回调函数对promise的状态检查后,根据获取到的检查结果,如检查到promise呈现操作成功的状态,进而会将操作成功的处理结果调回至主线程;如果检查到promise呈现操作失败的状态,则将操作失败的处理结果调回至主线程。

在一个实施例中,处理器执行计算机程序时,执行预设代码片段包括:检查promise状态;调用promise链式回调;当promise状态为完成状态时,调用promise链式回调,将异步操作的处理结果作为参数进行传递;当promise状态为拒绝状态时,调用promise链式回调,将异步操作产生的错误作为参数进行传递,并删除所述异步操作中被取消的异步错误。具体地,在帧循环中包含预设代码,并对预设代码执行循环操作,改代码首先遍历promise状态,判断promise的状态是初始状态还是从初始状态变成了操作完成状态还是从初始状态变成了操作拒绝状态,如果promise状态为初始状态不调用链式回调;如果promise状态为完成状态,则调用promise链式回调,将异步操作的处理结果作为参数进行传递,传递至主线程需要该结果的程序中,进行后续程序的运行,最终完成程序逻辑的所有执行任务,例如promise状态由登录是否成功决定,那么当登陆成功时,promise状态即为操作完成状态,此时登录成功这个结果对应的数据则作为参数传递至需要这个结果才能后续运行的程序中;如果promise状态为拒绝状态,则调用promise链式回调,将异步操作产生的错误作为参数进行传递,传递至主线程需要该结果的程序中,进行后续程序的运行,最终完成程序逻辑的所有执行任务,但是在promise状态为拒绝状态时,有的失败操作的结果不需要传回至程序继续运行,这种错误可以被做取消处理,并会在帧循环中将被取消的错误删除,执行删除操作后就不会影响程序的运行,提高了程序的运行效率。

在一个实施例中,处理器执行计算机程序时的删除异步操作中被取消的异步错误包括:通过cancel接口删除所述异步操作中被取消的异步错误。具体地,为了可以删除被取消的异步错误,在帧循环中添加了cancel接口,cancel接口可以在遇到不需要异常的时候,通过删除异步错误的操作,使得程序不会抛出异常,该操作可以解决主动中断异步的情况,例如网络超时,重试多次还是连不上服务器的时候,客户端会退出所有逻辑重新登录,该操作即为上述主动中断异步的情况,在这种情况下,则需要取消产生的异步错误,并且删除掉该取消信息。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:在协程向服务器发送请求后,暂停协程,在服务器返回的对所述业务数据的处理结果之后,继续协程。具体地,在协程向服务器发送请求后,协程暂停,当服务器处理完业务数据,协程继续,由协程对该处理后的处理结果接收后,异步回调函数会将协程中接收到的结果调回至主线程中。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:在检测到主动中断异步操作的情况下,中断业务协程,并中断该协程所有调用堆栈的协程。具体地,当协程检测到主动中断异步操作的情况,如网络超时,重试多次还是连不上服务器的时候,客户端会发出退出所有逻辑并重新登录的指令,协程会检测到该指令,即检测到了主动中断异步操作的情况。在检测到主动中断异步操作的情况下,直接中断业务协程,并中断该协程所有调用堆栈的协程,该方法不仅实现了主动中断异步操作,还减轻了逻辑的复杂度,提高了代码的可读性。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

主线程获取业务数据中产生的异步请求;

所述主线程根据所述异步请求启动协程,并由协程将所述业务数据上传至服务器;

所述协程接收所述服务器返回的对所述业务数据的处理结果;

所述主线程调用封装的异步回调函数从所述协程中回调所述处理结果,并根据所述处理结果更新所述业务数据。

在一个实施例中,计算机程序被处理器执行时,封装的异步回调函数采用帧回调函数,该帧回调函数中包含帧循环,帧循环通过在主线程中按照预设时间间隔循环执行预设代码片段而实现。具体地,在调用回调函数的时候,该函数采用帧回调函数,帧回调函数内置帧循环,该帧循环的操作发生在主线程,执行帧循环时,该循环会根据预设的时间间隔对预设代码进行循环操作,首先遍历所有promise状态,promise状态包括初始状态、操作完成状态、操作拒绝状态,接着根据遍历的promise状态进行响应处理,尤其当promise状态呈操作拒绝状态时会中断整个堆栈调用,由此减轻程序逻辑的复杂度。

在一个实施例中,计算机程序被处理器执行时主线程调用封装的异步回调函数从协程中回调处理结果,包括:在协程执行异步操作接收处理结果之后,所述主线程调用帧回调函数,利用所述帧回调函数中的所述帧循环检查promise状态,根据检测的所述promise状态从所述协程中回调所述处理结果。具体地,当协程接收到服务器返回的业务数据处理结果之后,该结果需要传回至主线程,而这个传回操作可以由调用回调函数执行,主线程调用帧回调函数,帧回调函数对promise的状态检查后,根据获取到的检查结果,如检查到promise呈现操作成功的状态,进而会将操作成功的处理结果调回至主线程;如果检查到promise呈现操作失败的状态,则将操作失败的处理结果调回至主线程。

在一个实施例中,计算机程序被处理器执行时,执行预设代码片段包括:检查promise状态;调用promise链式回调;当promise状态为完成状态时,调用promise链式回调,将异步操作的处理结果作为参数进行传递;当promise状态为拒绝状态时,调用promise链式回调,将异步操作产生的错误作为参数进行传递,并删除所述异步操作中被取消的异步错误。具体地,在帧循环中包含预设代码,并对预设代码执行循环操作,改代码首先遍历promise状态,判断promise的状态是初始状态还是从初始状态变成了操作完成状态还是从初始状态变成了操作拒绝状态,如果promise状态为初始状态不调用链式回调;如果promise状态为完成状态,则调用promise链式回调,将异步操作的处理结果作为参数进行传递,传递至主线程需要该结果的程序中,进行后续程序的运行,最终完成程序逻辑的所有执行任务,例如promise状态由登录是否成功决定,那么当登陆成功时,promise状态即为操作完成状态,此时登录成功这个结果对应的数据则作为参数传递至需要这个结果才能后续运行的程序中;如果promise状态为拒绝状态,则调用promise链式回调,将异步操作产生的错误作为参数进行传递,传递至主线程需要该结果的程序中,进行后续程序的运行,最终完成程序逻辑的所有执行任务,但是在promise状态为拒绝状态时,有的失败操作的结果不需要传回至程序继续运行,这种错误可以被做取消处理,并会在帧循环中将被取消的错误删除,执行删除操作后就不会影响程序的运行,提高了程序的运行效率。

在一个实施例中,计算机程序被处理器执行时的删除异步操作中被取消的异步错误包括:通过cancel接口删除所述异步操作中被取消的异步错误。具体地,为了可以删除被取消的异步错误,在帧循环中添加了cancel接口,cancel可以在遇到不需要异常的时候,通过删除异步错误的操作,使得程序不会抛出异常,该操作可以解决主动中断异步的情况,例如网络超时,重试多次还是连不上服务器的时候,客户端会退出所有逻辑重新登录,该操作即为上述主动中断异步的情况,在这种情况下,则需要取消产生的异步错误,并且删除掉该取消信息。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:在协程向服务器发送请求后,暂停协程,在服务器返回的对所述业务数据的处理结果之后,继续协程。具体地,在协程向服务器发送请求后,协程暂停,当服务器处理完业务数据,协程继续,由协程对该处理后的处理结果接收后,异步回调函数会将协程中接收到的结果调回至主线程中。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:在检测到主动中断异步操作的情况下,中断业务协程,并中断该协程所有调用堆栈的协程。具体地,当协程检测到主动中断异步操作的情况,如网络超时,重试多次还是连不上服务器的时候,客户端会发出退出所有逻辑并重新登录的指令,协程会检测到该指令,即检测到了主动中断异步操作的情况。在检测到主动中断异步操作的情况下,直接中断业务协程,并中断该协程所有调用堆栈的协程,该方法不仅实现了主动中断异步操作,还减轻了逻辑的复杂度,提高了代码的可读性。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

相关技术
  • Lua语言的异步处理方法、装置、计算机设备和存储介质
  • 语言资源处理方法、装置、计算机设备和存储介质
技术分类

06120112276438