手机版

小程序开发中如何使用异步等待并封装公共异步请求的方法

时间:2021-08-27 来源:互联网 编辑:宝哥软件园 浏览:

前言

在平常的项目开发中肯定会遇到同步异步执行的问题,还有的就是当执行某一个操作依赖上一个执行所返回的结果,那么这个时候你会如何解决这个问题呢;

1.是用函数让它异步执行,显然这只是让它加入异步任务队列中去执行,但并不能保证等待其返回结果再去执行另一个操作。

2.还是自己封装回收函数?那样就会陷入所谓的回调地狱,代码层层嵌套,环环相扣,逻辑稍微复杂就会很难去维护。

3.当然es6中的承诺倒是很好的解决了这样的问题,再配合es7的异步非同步(异步)和等待就更完美了,等待返回的也是一个承诺对象,这个关于承诺和异步,等待的使用方法就不说了。

实现方案

首先小程序目前还是不支持es7的异步非同步(异步)和等待的,那么如何让它支持呢

1、点击下载

再生器,并把下载好的runtime.js文件夹放到自己小程序的实用工具目录下,包总共才20kb多,体积很小的。

2、在需要调的地方引入从导入再生或更新时间'././utils/runtime.js '

3、如何封装并使用

封装:

const postData=异步函数(网址,数据){ wx.showLoading({ title: '加载中,})让承诺=等待新的承诺(函数(解析,拒绝){ wx.request({ url: baseUrl,data: data,method: 'POST ',header : { ' content-type ' : ' application/JSON ',' access-token ' : wx。getstoragency(' token ')},success : function(RES){ wx。hide loading();如果(RES . status code===200){ resolve(RES)} else { reject(RES . data)},则失败:函数(err){ wx。hide loading();拒绝(err) if (err.code===401) {} } })返回Promisep }模块。导出={ PostDATa }使用:

从导入再生或更新时间'././utils/runtime。js ';const app=getApp(),postData=require('././service/KoalaAPI。js’);async demo(){ wait PostDATa(app。GlobalDATa。BaseURl '/test ',{ data: { }).然后((res)={ console.log(res) })下面进行了更完善的一个封装,包括各种错误判断的处理和简化,通过传参的方式,来灵活调用

//当前hostconst URL _ host=require(' API。js ').主机/当前版本const CurrentVersion=require(' util。js ').currentVersion //当前路径从“乌提尔。js"//导入{ currentPagePath }调用取得方法,然后依次链式传入//url ,方法、标头、数据、加载(是否显示装载)函数提取(网址),方法、头、数据、加载){ //判断给服务端传递不明确的的问题让fetchP=新承诺(函数(解析,拒绝){ if(加载){ wx。showLoading({ icon : ' loading ' })} if(数据。数据的联合id类型。union id==' undefined '){ wx。隐藏加载()返回拒绝({ ok:false,错误: ' union id-'类型的数据。union id });} wx。请求({ URL : URL _ host URL,method:方法?方法: 'GET ',标头: { ' content-type ' : ' application/JSON ',//默认值版本: currentVersion,' page path ' : current page path()},数据:数据,成功:函数(RES){ if(RES . status code 500){ resolve(RES . data)} else { showError()reject(RES . data)} } },fail:函数(错误){ showError()}拒绝(错误)},完成:函数(comp){ if(loading){ wx。hideloping()} } })服务器开小差了函数showError () { wx.hideLoading() //获取头文件路径wx。navigate to({ URL : '/page/server error/server error ',})}模块。导出={ fetch}思考

1、为什么引入重生或更新时间,就能够使用异步/等待?不需要配合巴别塔吗?

2、再生或更新时间都做了什么?

总结

1、首先先明白巴别塔和夹棉分别干啥的;

巴比伦式的城市是一个广泛使用的转码器宝贝默认只转换新的Java脚本语言句法,而不转换新的原料药。

例如,全局对象,如迭代器、生成器、集合、映射、代理、反射、符号、承诺,以及在全局对象上定义的一些方法(如Object.assign)将不会被翻译。

如果您想使用这些新的对象和方法,您必须使用babel-polyfill为当前环境提供一个垫圈。

2.Polyfill用于实现浏览器不支持的本机API的代码。

3.理解了上面的意思之后,还需要理解的是,babel-poly ill把所有的都添加到js文件中,而运行时会判断你需要加载什么,并有选择地加载,后者不会污染全局变量。在这里,再生时间最终转化为es6的发生器。具体可以自己去巴别塔官网,输入相关代码,就可以看到最终转换的代码。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:小程序开发中如何使用异步等待并封装公共异步请求的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。