CN111506368A - 对异步调用转同步调用的方法、装置、设备及存储介质 - Google Patents
对异步调用转同步调用的方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111506368A CN111506368A CN202010317992.6A CN202010317992A CN111506368A CN 111506368 A CN111506368 A CN 111506368A CN 202010317992 A CN202010317992 A CN 202010317992A CN 111506368 A CN111506368 A CN 111506368A
- Authority
- CN
- China
- Prior art keywords
- asynchronous
- api
- call
- applet
- babel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本公开提供了一种对小程序的异步调用转同步调用的方法、装置、设备及存储介质。该方法包括:向小程序的应用程序接口API发送异步调用请求;基于异步等待机制,等待完成对所述API的调用;当完成对所述API的调用后,执行后续操作。该方法可以避免出现冲突操作和数据脏读,保证程序运行的正确性与数据的完整性。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种对小程序的异步调用转同步调用的方法、装置、设备及存储介质。
背景技术
小程序中提供的API(Application Programming Interface,应用程序接口)大部分是异步操作,容易引起数据异常、出现冲突操作和数据脏读,同步操作可以保证程序运行的正确性与数据的完整性,因此需要一种对小程序的异步调用转同步调用的方法。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种对小程序的异步调用转同步调用的方法、装置、设备及存储介质,可以将小程序中的异步调用转为同步调用。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的一个方面,提供一种对小程序的异步调用转同步调用的方法,包括:向小程序的应用程序接口API发送异步调用请求;基于异步等待机制,等待完成对API的调用;当完成对API的调用后,执行后续操作。
在一些实施例中,向小程序的应用程序接口API发送异步调用请求,包括:实例化Promise对象;及通过调用Promise对象的函数,向小程序的API发送异步调用请求。
在一些实施例中,上述方法还包括:当对API的调用失败时,Promise的状态被置为失败,返回新的实例化Promise对象;当对API的调用异常时,Promise的状态被置为失败,返回新的实例化Promise对象。
在一些实施例中,异步等待机制是通过异步等待函数实现的,异步等待函数包括async/await函数。
在一些实施例中,上述方法还包括:加载Babel编译环境,以对所述异步等待函数进行编译。在一些实施例中,加载Babel编译环境包括:加载Babel中的基本加载器,并对基本加载器进行配置;创建.babelrc文件;在.babelrc文件中对预设文件和插件文件进行配置;及在插件文件中配置babel-polyfill及babel-runtime,以对全局对象进行转码。
在一些实施例中,上述方法还包括:安装babel-plugin-transform-runtime插件。
根据本公开的另一个方面,提供一种对小程序的异步调用转同步调用的装置,包括:请求发送模块,用于向小程序的应用程序接口API发送异步调用请求;调用等待模块,用于基于异步等待机制,等待完成对API的调用;操作执行模块,用于当完成对API的调用后,执行后续操作。
根据本公开的再一个方面,提供一种计算机设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述任一种方法。
根据本公开的又一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种方法。
本公开实施例提供的对小程序的异步调用转同步调用的方法,在向小程序的应用程序接口API发送异步调用请求时,基于异步等待机制,等待完成对API的调用;并在完成对API的调用后,执行后续操作,可以将小程序中的API异步调用转为同步调用,从而可以避免出现冲突操作和数据脏读,保证了程序运行的正确性与数据的完整性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本公开一个示例性实施例提供的计算机系统的结构示意图。
图2是根据一示例性实施方式示出的一种对小程序的异步调用转同步调用的方法的流程图。
图3是根据一示例性实施方式示出的另一种对小程序的异步调用转同步调用的方法的流程图。
图4是根据一示例示出的一种Promise中执行函数的流程图。
图5是根据一示例示出的一种Promise中执行结果的示意图。
图6是根据一示例性实施方式示出的另一种对小程序的异步调用转同步调用的方法的流程图。
图7是根据一示例性实施方式示出的再一种对小程序的异步调用转同步调用的方法的流程图。
图8是根据一示例性实施方式示出的一种对小程序的异步调用转同步调用的装置的框图。
图9是根据一示例性实施方式示出的一种计算机系统的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
在本公开的描述中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
图1是本公开一个示例性实施例提供的计算机系统的结构示意图。该系统包括:若干个终端120和服务器集群140。
终端120可以是手机、游戏主机、平板电脑、电子书阅读器、智能眼镜、MP4(MovingPicture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、智能家居设备、AR(Augmented Reality,增强现实)设备、VR(Virtual Reality,虚拟现实)设备等移动终端,或者,终端120也可以是个人计算机(Personal Computer,PC),比如膝上型便携计算机和台式计算机等等。
其中,终端120中可以安装有用于提供对小程序的异步调用转同步调用的方法的应用程序。
终端120与服务器集群140之间通信网络相连。可选的,通信网络是有线网络或无线网络。
服务器集群140是一台服务器,或者由若干台服务器组成,或者是一个虚拟化平台,或者是一个云计算服务中心。服务器集群140用于为提供对小程序的异步调用转同步调用的方法的应用程序提供后台服务。可选地,服务器集群140承担主要计算工作,终端120承担次要计算工作;或者,服务器集群140承担次要计算工作,终端120承担主要计算工作;或者,终端120和服务器集群140之间采用分布式计算架构进行协同计算。
在一些可选的实施例中,服务器集群140用于存储信息。
可选地,不同的终端120中安装的应用程序的客户端是相同的,或两个终端120上安装的应用程序的客户端是不同控制系统平台的同一类型应用程序的客户端。基于终端平台的不同,该应用程序的客户端的具体形态也可以不同,比如,该应用程序客户端可以是手机客户端、PC客户端或者全球广域网(World Wide Web,Web)客户端等。
本领域技术人员可以知晓,上述终端120的数量可以更多或更少。比如上述终端可以仅为一个,或者上述终端为几十个或几百个,或者更多数量。本公开实施例对终端的数量和设备类型不加以限定。
可选的,该系统还可以包括管理设备(图1未示出),该管理设备与服务器集群140之间通过通信网络相连。可选的,通信网络是有线网络或无线网络。
可选的,上述的无线网络或有线网络使用标准通信技术和/或协议。网络通常为因特网、但也可以是任何网络,包括但不限于局域网(Local Area Network,LAN)、城域网(Metropolitan Area Network,MAN)、广域网(Wide Area Network,WAN)、移动、有线或者无线网络、专用网络或者虚拟专用网络的任何组合)。在一些实施例中,使用包括超文本标记语言(Hyper Text Mark-up Language,HTML)、可扩展标记语言(ExtensibleMarkupLanguage,XML)等的技术和/或格式来代表通过网络交换的数据。此外还可以使用诸如安全套接字层(Secure Socket Layer,SSL)、传输层安全(Transport Layer Security,TLS)、虚拟专用网络(Virtual Private Network,VPN)、网际协议安全(InternetProtocolSecurity,IPsec)等常规加密技术来加密所有或者一些链路。在另一些实施例中,还可以使用定制和/或专用数据通信技术取代或者补充上述数据通信技术。
下面,将结合附图及实施例对本公开示例实施例中的对小程序的异步调用转同步调用的方法方法的各个步骤进行更详细的说明。
图2是根据一示例性实施方式示出的一种对小程序的异步调用转同步调用的方法的流程图。本公开实施例提供的方法可以由任意具备计算处理能力的电子设备执行,例如如图1中的服务器集群140。
如图2所示,对小程序的异步调用转同步调用的方法10包括:
在步骤S104中,向小程序的应用程序接口API发送异步调用请求。
小程序是一种不需要下载安装即可使用的应用。
API(Application Programming Interface,应用程序接口)可以是一些预先定义的函数,或是软件系统不同组成部分衔接的约定,可以提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问原码,或理解内部工作机制的细节。
异步调用可以无需等待被调用函数的返回值就让操作继续进行的方法。
在小程序中,有些API是异步的,例如:wx.request(请求)、wx.showToast(延时跳转)、wx.showLoading(显示加载)等。
异步调用请求例如可以为数据访问请求、加载图片请求。
在步骤S106中,基于异步等待机制,等待完成对API的调用。
在一些实施例中,异步等待机制是通过异步等待函数实现的,异步等待函数包括async/await(异步/等待)函数。
以小程序中页面渲染操作为例,在小程序里面可以使用async/await,在小程序的页面onload(加载)周期里面,基于await(等待)机制,等待APP(Application,应用程序)全局加载完毕后再执行后续的业务流程。
例如可以使用async/await语法中的await机制等待getPrepareState(得到准备状态)函数的执行结果,index.js(索引)文件的代码可以为:
其中,getPrepareState函数可以使用appPrepare(应用程序准备)状态值判断全局APP是否执行完毕。可以在app.js(应用程序)文件里面的开始和结尾分别设置appPrepare开关,当appPrepare为true(真)时表示APP正在准备中,当appPrepare为false(假)表示APP准备完毕。
当appPrepare为true时,可以每隔预设间隔获取appPrepare状态值,预设间隔可以根据实际情况设置,例如:100ms,直到APP准备完毕,await中函数执行完成。
app.js文件的代码可以为:
在步骤S108中,当完成对API的调用后,执行后续操作。
仍以上述小程序中页面渲染操作为例,当appPrepare为false表示APP准备完毕,即已完成对API的调用,页面await中函数执行完成,可以继续页面中的业务流程。
在一些实施例中,方法10还包括:
在步骤S102中,加载Babel编译环境,以对异步等待函数进行编译。
其中,Babel(编译器)是一个工具链,主要将ECMAScript2015+(EuropeanComputer Manufacturers Association Script,欧洲计算机制造商协会脚本)版本的代码转换为向后兼容的Javascript(Java脚本)预发,以便能够运行在当前和旧版本的浏览器或环境中。
Babel的转译过程可以分为三个阶段:parsing(解析),transforming(转换),generating(生成)。Babel可以转译新标准引入的语法,例如可以将ES6(ECMAScript6,欧洲计算机制造商协会脚本)的箭头函数转译成ES5的函数。
Babel转译过程中,解析parsing阶段可以将代码字符串解析成抽象语法树,变换transforming阶段可以对抽象语法树进行转换操作,生成generating阶段可以根据变换后的抽象语法树再生成代码字符串。
Babel中的插件可以应用于Babel的转译过程中。
异步等待函数例如可以为async/await函数。
async/await中,async是“异步”的简写,async function用于申明一个function是异步的;await是async wait的简写,可以用于等待一个异步方法执行完成。
async异步函数的执行不会阻塞后面代码的执行,async函数返回的可以是一个Promise(许诺)对象,可以使用then(然后)方法添加回调函数。当函数执行的时候,遇到await时就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
await函数中,代码需要等待await后面的函数运行完并且有了返回结果之后,继续执行下面的代码。
await可以放置在Promise调用之前,await可以强制后面的代码等待,直到Promise对象resolve(解决),得到resolve的值作为await表达式的运算结果。
通过加装Babel编译环境,可以允许小程序对async/await语法进行编译。本公开实施例提供的对小程序的异步调用转同步调用的方法,在向小程序的应用程序接口API发送异步调用请求时,基于异步等待机制,等待完成对API的调用;并在完成对API的调用后,执行后续操作,可以将小程序中的API异步调用转为同步调用,从而可以避免出现冲突操作和数据脏读,保证了程序运行的正确性与数据的完整性。
图3是根据一示例性实施方式示出的另一种对小程序的异步调用转同步调用的方法的流程图。
与图2所示的对小程序的异步调用转同步调用的方法10不同的是,图3所示的方法20进一步提供了如何向小程序的应用程序接口API发送异步调用请求,也即提供了上述步骤S104的一种实施例。
参考图3,方法20包括:
在步骤S1042中,实例化Promise对象。
Promise是异步编程的一种解决方案。
Promise对象是全局对象,可以使用new Promise创建Promise对象。
实例化Promise对象的代码可以为:
new Promise(function(resolve,reject){
//...
})
其中,resolve和reject(拒绝)两个函数均为方法。resolve方法用于处理异步操作成功后的业务,reject方法用于处理异步操作失败后的业务。
如图4及图5所示,Proise对象有三种状态,分别是pending-进行中、resolved-已完成、rejected-已失败。pending可以表示刚刚创建一个Promise实例的时候,表示初始状态;fulfilled(满足的)可以表示resolve方法调用的时候,表示操作成功;rejected可以表示reject方法调用的时候,表示操作失败;
then()方法可以用于绑定处理操作后的处理程序,then()方法的代码可以为:
pro.then(function(res){
//操作成功的处理程序
},function(error){
//操作失败的处理程序
})
其中,参数是两个函数,第一个用于处理操作成功后的业务,第二个用于处理操作失败后的业务。
在步骤S1044中,通过调用Promise对象的函数,向小程序的API发送异步调用请求。
仍以上述页面渲染操作为例,例如可以使用函数app.tools.getPrepareState()执行对小程序的API的调用。
在一些实施例中,方法20还包括:当对API的调用失败时,Promise的状态被置为失败,返回新的实例化Promise对象。
如图5所示,当对API的调用失败时,Promise的状态被置为失败rejected,返回一个新的实例化Promise对象。
在一些实施例中,方法20还包括:当对API的调用异常时,Promise的状态被置为失败,返回新的实例化Promise对象。
如图5所示,当成功或失败执行有异常时,Promise的状态被置为失败rejected,返回一个新的实例化Promise对象。
方法20和方法10相同的步骤在此不再赘述。
图6是根据一示例性实施方式示出的再一种对小程序的异步调用转同步调用的方法的流程图。
在图2所示的对小程序的异步调用转同步调用的方法10的步骤S102之前,图6所示的对小程序的异步调用转同步调用的方法30还包括:
在步骤S302中,安装NPM工具。
在安装NPM(包管理)工具之前,在小程序开发工具中取消勾选ES6转ES5,可以避免报错。
NPM是随同NodeJS(Java脚本运行环境)一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景可以为:允许用户从NPM服务器下载别人编写的第三方包到本地使用;允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用;允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
在步骤S304中,安装webpack工具。
Webpack(网页打包)工具是一个现代JavaScript(Java脚本)应用程序的静态模块的打包器。
webpack可以能把多种资源,例如JS(Java Script,Java脚本)、coffee(咖啡)、样式、图片等都作为模块来使用和处理,可以把有依赖关系的各种文件打包成一系列的静态资源。
webpack支持很多模块加载器的调用,可以使模块加载器灵活定制,比如babel-loader(调用API)加载器、less-loader(链式调用)加载器。
webpack可以通过配置打包成多个文件,有效的利用浏览器的缓存功能提升性能。
图7是根据一示例性实施方式示出的再一种对小程序的异步调用转同步调用的方法的流程图。
与图6所示的对小程序的异步调用转同步调用的方法30不同的是,图7所示的方法进一步提供了如何加载Babel编译环境,也即提供了上述步骤S102的一种实施例。
参考图7,步骤S102包括:
在步骤S1021中,加载Babel中的基本加载器,并对基本加载器进行配置。
Babel中的基本加载器有:
babel-core
babel-jest
babel-loader
babel-minify-webpack-plugin
babel-plugin-lodash
babel-plugin-transform-runtime
babel-preset-env
babel-preset-stage-0
配置上述基本加载器的代码可以为:
在步骤S1022中,创建.babelrc文件。
可以在项目的根目录下创建.babelrc文件。
在babel执行编译的过程中,可以从项目的根目录下.babelrc文件中读取配置。
在步骤S1023中,在.babelrc文件中对预设文件和插件文件进行配置。
在.babelrc(配置文件)中,对预设文件(presets)和插件文件(plugins)进行配置。
通过插件文件(plugins),Babel可以知道要使用哪些插件,这些插件可以控制如何转换代码。
在步骤S1024中,在插件文件中配置babel-polyfill(转码器)及babel-runtime(转码器),以对全局对象进行转码。
比如ES6在Array(数组)对象上新增了Array.from方法,可以使用babel-polyfill来转换,使该方法可以运行。
babel-polyfill和babel-runtime可以解决新的API与全局对象或全局对象方法不足的问题。
babel-polyfill的原理是当运行环境中并没有实现的一些方法,babel-polyfill会做兼容。
babel-runtime可以将es6编译成es5去执行。
babel-polyfill可以通过向全局对象和内置对象的prototype(原型)上添加方法来实现转码。比如运行环境中不支持Array.prototype.find(数组原型寻找)方法,引入polyfill,就可以使用es6方法来编写。
babel-runtime不会污染全局变量和内置对象的原型,例如,当需要使用Promise时,import(引入)babel-runtime中的Promise即可。
在一些实施例中,步骤S102还包括:
在步骤S1025中,安装babel-plugin-transform-runtime插件。
在步骤S1024中,当引入的文件较多时,使用插件babel-plugin-transform-runtime可以帮助避免手动引入,提高效率,并且还可以做共用方法的抽离。例如有100个模块都在使用promise,而promise的pollyfill仅仅存在1份。
需要注意的是,上述附图仅是根据本公开示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
下述为本公开装置实施例,可以用于执行本公开方法实施例。对于本公开装置实施例中未披露的细节,请参照本公开方法实施例。
图8是根据一示例性实施方式示出的一种对小程序的异步调用转同步调用的装置的框图。
如图8所示,对小程序的异步调用转同步调用的装置40包括:请求发送模块404、调用等待模块406及操作执行模块408。
其中,请求发送模块404用于向小程序的应用程序接口API发送异步调用请求;调用等待模块406用于基于异步等待机制,等待完成对API的调用;操作执行模块408用于当完成对API的调用后,执行后续操作。
在一些实施例中,请求发送模块404包括对象实例化单元及请求发送单元。其中,对象实例化单元用于实例化Promise对象;及请求发送单元用于通过调用Promise对象的函数,向小程序的API发送异步调用请求。
在一些实施例中,装置40还包括:第一返回模块,用于当对API的调用失败时,Promise的状态被置为失败,返回新的实例化Promise对象;第二返回模块,用于当对API的调用异常时,Promise的状态被置为失败,返回新的实例化Promise对象。
在一些实施例中,异步等待机制是通过异步等待函数实现的,异步等待函数包括async/await函数。
在一些实施例中,装置40还包括:环境加载模块,用于加载Babel编译环境,以对所述异步等待函数进行编译。
在一些实施例中,环境加载模块包括加载器加载单元、文件创建单元、文件配置单元及插件配置单元。其中,加载器加载单元用于加载Babel中的基本加载器,并对基本加载器进行配置;文件创建单元用于创建.babelrc文件;文件配置单元用于在.babelrc文件中对预设文件和插件文件进行配置;及插件配置单元用于在插件文件中配置babel-polyfill及babel-runtime,以对全局对象进行转码。
在一些实施例中,装置40还包括:插件安装模块,用于安装babel-plugin-transform-runtime插件。
本公开实施例提供的对小程序的异步调用转同步调用的装置,基于异步等待机制,等待完成对API的调用;并在完成对API的调用后,执行后续操作,可以将小程序的API异步调用转为同步调用,从而可以避免出现冲突操作和数据脏读,保证了程序运行的正确性与数据的完整性。
需要注意的是,上述附图中所示的框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
图9是根据一示例性实施方式示出的一种计算机设备的结构示意图。需要说明的是,图9示出的计算机设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图9所示,计算机设备800包括中央处理单元(CPU)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有系统800操作所需的各种程序和数据。CPU 801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本发明的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(CPU)801执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括发送单元、获取单元、确定单元和第一处理单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,发送单元还可以被描述为“向所连接的服务端发送图片获取请求的单元”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:
向小程序的应用程序接口API发送异步调用请求;
基于异步等待机制,等待完成对所述API的调用;
当完成对所述API的调用后,执行后续操作。
以上具体地示出和描述了本发明的示例性实施方式。应可理解的是,本发明不限于这里描述的详细结构、设置方式或实现方法;相反,本发明意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
Claims (10)
1.一种对小程序的异步调用转同步调用的方法,其特征在于,包括:
向小程序的应用程序接口API发送异步调用请求;
基于异步等待机制,等待完成对所述API的调用;
当完成对所述API的调用后,执行后续操作。
2.根据权利要求1所述的方法,其特征在于,向小程序的应用程序接口API发送异步调用请求,包括:
实例化Promise对象;及
通过调用所述Promise对象的函数,向所述小程序的API发送所述异步调用请求。
3.根据权利要求2所述的方法,其特征在于,还包括:当对所述API的调用失败时,所述Promise的状态被置为失败,返回新的实例化Promise对象;当对所述API的调用异常时,所述Promise的状态被置为失败,返回新的实例化Promise对象。
4.根据权利要求1所述的方法,其特征在于,所述异步等待机制是通过异步等待函数实现的,所述异步等待函数包括async/await函数。
5.根据权利要求4所述的方法,其特征在于,还包括:加载Babel编译环境,以对所述异步等待函数进行编译。
6.根据权利要求5所述的方法,其特征在于,加载Babel编译环境包括:
加载Babel中的基本加载器,并对所述基本加载器进行配置;
创建.babelrc文件;
在所述.babelrc文件中对预设文件和插件文件进行配置;及
在所述插件文件中配置babel-polyfill及babel-runtime,以对全局对象进行转码。
7.根据权利要求6所述的方法,其特征在于,还包括:
安装babel-plugin-transform-runtime插件。
8.一种对小程序的异步调用转同步调用的装置,其特征在于,包括:
请求发送模块,用于向小程序的应用程序接口API发送异步调用请求;
调用等待模块,用于基于异步等待机制,等待完成对所述API的调用;
操作执行模块,用于当完成对所述API的调用后,执行后续操作。
9.一种计算机设备,包括:存储器、处理器及存储在所述存储器中并可在所述处理器中运行的可执行指令,其特征在于,所述处理器执行所述可执行指令时实现如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机可执行指令,其特征在于,所述可执行指令被处理器执行时实现如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010317992.6A CN111506368B (zh) | 2020-04-21 | 2020-04-21 | 对异步调用转同步调用的方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010317992.6A CN111506368B (zh) | 2020-04-21 | 2020-04-21 | 对异步调用转同步调用的方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111506368A true CN111506368A (zh) | 2020-08-07 |
CN111506368B CN111506368B (zh) | 2023-09-22 |
Family
ID=71876276
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010317992.6A Active CN111506368B (zh) | 2020-04-21 | 2020-04-21 | 对异步调用转同步调用的方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111506368B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112732343A (zh) * | 2020-12-31 | 2021-04-30 | 中国电子科技网络信息安全有限公司 | 一种堆叠设备中业务子母板卡加载的方法 |
CN113568686A (zh) * | 2020-10-30 | 2021-10-29 | 深圳市九九互动科技有限公司 | Lua语言的异步处理方法、装置、计算机设备和存储介质 |
WO2024037553A1 (zh) * | 2022-08-16 | 2024-02-22 | 华为技术有限公司 | 一种生命周期调度的方法、装置及电子设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050273335A1 (en) * | 2004-04-23 | 2005-12-08 | Microsoft Corporation | Semantic framework for natural language programming |
US20070169012A1 (en) * | 2005-11-14 | 2007-07-19 | Microsoft Corporation | Asynchronous just-in-time compilation |
US20140237452A1 (en) * | 2013-02-15 | 2014-08-21 | Microsoft Corporation | Call Stacks for Asynchronous Programs |
US20180329761A1 (en) * | 2017-05-10 | 2018-11-15 | International Business Machines Corporation | Integrating transaction processing system interfaces with event-driven polyglot runtime modules |
CN108829526A (zh) * | 2018-05-08 | 2018-11-16 | 武汉斗鱼网络科技有限公司 | 一种进程间通信方法、电子设备及可读存储介质 |
CN109002286A (zh) * | 2018-06-29 | 2018-12-14 | 上海哔哩哔哩科技有限公司 | 基于同步编程的数据异步处理方法及装置 |
CN109309712A (zh) * | 2018-09-07 | 2019-02-05 | 平安科技(深圳)有限公司 | 基于接口异步调用的数据传输方法、服务器及存储介质 |
CN110018908A (zh) * | 2018-01-08 | 2019-07-16 | 武汉斗鱼网络科技有限公司 | 一种进程间通信方法、电子设备及可读存储介质 |
CN110659141A (zh) * | 2018-06-30 | 2020-01-07 | 武汉斗鱼网络科技有限公司 | 一种指令执行的方法以及相关设备 |
CN110825441A (zh) * | 2019-09-23 | 2020-02-21 | 万达信息股份有限公司 | 异步系统的实现方法、计算机设备和存储介质 |
-
2020
- 2020-04-21 CN CN202010317992.6A patent/CN111506368B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050273335A1 (en) * | 2004-04-23 | 2005-12-08 | Microsoft Corporation | Semantic framework for natural language programming |
US20070169012A1 (en) * | 2005-11-14 | 2007-07-19 | Microsoft Corporation | Asynchronous just-in-time compilation |
US20140237452A1 (en) * | 2013-02-15 | 2014-08-21 | Microsoft Corporation | Call Stacks for Asynchronous Programs |
US20180329761A1 (en) * | 2017-05-10 | 2018-11-15 | International Business Machines Corporation | Integrating transaction processing system interfaces with event-driven polyglot runtime modules |
CN110018908A (zh) * | 2018-01-08 | 2019-07-16 | 武汉斗鱼网络科技有限公司 | 一种进程间通信方法、电子设备及可读存储介质 |
CN108829526A (zh) * | 2018-05-08 | 2018-11-16 | 武汉斗鱼网络科技有限公司 | 一种进程间通信方法、电子设备及可读存储介质 |
CN109002286A (zh) * | 2018-06-29 | 2018-12-14 | 上海哔哩哔哩科技有限公司 | 基于同步编程的数据异步处理方法及装置 |
CN110659141A (zh) * | 2018-06-30 | 2020-01-07 | 武汉斗鱼网络科技有限公司 | 一种指令执行的方法以及相关设备 |
CN109309712A (zh) * | 2018-09-07 | 2019-02-05 | 平安科技(深圳)有限公司 | 基于接口异步调用的数据传输方法、服务器及存储介质 |
CN110825441A (zh) * | 2019-09-23 | 2020-02-21 | 万达信息股份有限公司 | 异步系统的实现方法、计算机设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
"FLUTTER实战", 《机械工业出版社》, pages: 30 - 34 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113568686A (zh) * | 2020-10-30 | 2021-10-29 | 深圳市九九互动科技有限公司 | Lua语言的异步处理方法、装置、计算机设备和存储介质 |
CN113568686B (zh) * | 2020-10-30 | 2023-11-28 | 深圳市九九互动科技有限公司 | Lua语言的异步处理方法、装置、计算机设备和存储介质 |
CN112732343A (zh) * | 2020-12-31 | 2021-04-30 | 中国电子科技网络信息安全有限公司 | 一种堆叠设备中业务子母板卡加载的方法 |
WO2024037553A1 (zh) * | 2022-08-16 | 2024-02-22 | 华为技术有限公司 | 一种生命周期调度的方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111506368B (zh) | 2023-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11550599B2 (en) | Method and apparatus for running applet | |
CN111506368A (zh) | 对异步调用转同步调用的方法、装置、设备及存储介质 | |
US11720344B2 (en) | Code hot-update method and device, storage medium, processor, and terminal | |
CN109542506B (zh) | 一种可灵活配置接口和快速交付服务的系统 | |
CN110895471A (zh) | 安装包生成方法、装置、介质及电子设备 | |
CN113672224A (zh) | 小程序页面代码生成方法、装置及计算机设备 | |
CN112631590A (zh) | 组件库生成方法、装置、电子设备和计算机可读介质 | |
KR101117165B1 (ko) | 이기종 운영체제 계층 모듈에서 동작하는 웹기반어플리케이션의 연동이 가능한 모바일 단말기용 웹 플랫폼 유닛 | |
CN111324395B (zh) | 调用方法、装置和计算机可读存储介质 | |
CN106775916B (zh) | 减小应用安装包的方法、装置及电子设备 | |
CN111414154A (zh) | 前端开发的方法、装置、电子设备和存储介质 | |
CN115934093A (zh) | 小程序跨端应用方法、相关装置及计算机存储介质 | |
CN116166457A (zh) | 数据处理方法及相关设备 | |
CN113709171B (zh) | 一种用于跨组件状态通信的方法和装置 | |
CN113779122B (zh) | 导出数据的方法和装置 | |
CN115328679A (zh) | 异构函数库的自动化集成方法、计算设备及其系统 | |
CN114579334A (zh) | 一种通信方法、装置、电子设备及存储介质 | |
CN114064176A (zh) | 一种视图交互方法、装置、电子设备及计算机可读介质 | |
CN112612531A (zh) | 应用程序启动方法、装置、电子设备及存储介质 | |
CN117093286B (zh) | 插件生成方法、装置、设备及计算机可读存储介质 | |
CN112929675B (zh) | 一种图像资源的压缩方法、装置和电子设备 | |
CN114443316B (zh) | 一种对象访问方法、装置及电子设备 | |
CN114064148B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN113467861A (zh) | 文件调用方法和装置、存储介质及电子设备 | |
CN109144566B (zh) | 实时操作系统、实时内核的访问方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |