这篇文章主要讲解了微信小程序中如何使用异步/等待,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
微信小程序中有大量接口是异步调用,比如<代码> wx.login() 代码>,<代码> wx.request() 代码>,<代码> wx.getUserInfo() 代码>等,都是使用一个对象作为参数,并定义了<代码>成功()代码>,<代码>失败()代码>和<代码>完成()代码>作为异步调用不同情况下的回调。
但是,以回调的方式来写程序,真的很伤,如果有一个过程需要依次干这些事情:
- <李> <代码> wx.getStorage() 代码>获取缓存数据,检查登录状态李> <李> <代码> wx.getSetting() 代码>获取配置信息,李> <李> <代码> wx.login() 代码>使用配置信息进行登录李> <李> <代码> wx.getUserInfo() 代码>登录后获取用户信息李> <李> <代码> wx.request() 代码>向业务服务器发起数据请求李> <>李……李>
那么,代码大概会长这样
wx.getStorage ({ 失败:()=比;{ wx.getSetting ({ 成功:设置=比;{ wx.login ({ 成功:({代码})=比;{ wx.getUesrInfo ({ 代码, 成功:(用户信息)=比;{ wx.request ({ 成功:()=比;{//做某事 } }); } }); } }); } }); } });
显然,异步/等待可以同样逻辑的代码看起来舒服得多。不过默认情况下,“微信开发者工具”并不支持async/等待。如何启用?
1。用上异步/等待
如果有心,在微信小程序官方文档中搜索<代码>异步> 代码可以找到“工具,# 8658;开发辅助,# 8658;代码编译”页面中提到了对异步/等待的支持情况,是在“增加编译“小节的一个表格中,摘录一段:
在<强> 1.02.1904282 强>以及之后版本的开发工具中,增加了增强编译的选项来增强ES6转ES5的能力,启用后会使用新的编译逻辑以及提供额外的选项供开发者使用。
特性原有逻辑增强编译async/等待不支持支持<李>支持async/等待语法,按需注入<代码> regeneratorRuntime> 代码,目录位置与辅助函数一致李>
引用>总之呢,就是,只要把“微信开发者工具”更新到<代码> v1.02.1904282> 代码以上,就不需要干<代码> npm安装再生器> 代码这之类的事情,只需要修改一个配置项就能使用<代码>异步/等待代码>特性了。这个配置就在“工具栏,# 8658;详情,# 8658;本地设置”页面中。
为了快速验证async/等待可用,在<代码>应用程序。js代码>的<代码> onLaunch() 代码>事件函数中加一段代码:
(异步()=比;{ const p=等待新的承诺(解决=比;{ setTimeout(()=比;解决(“你好async/await"), 1000); }); console.log (p); })();在短暂的自动编译运行之后,在调试器界面的控制台页签中可以看到输出:
<代码>你好async/等待代码>如果不行,请先检查“微信开发者工具”的版本——至少,去下载一个最新版本总不会有问题的。
2。改造wx。abcd异步方法
虽然async/等待得到了支持,但是还得把<代码> wx.abcd() 代码>封装成承诺风格才行。
节点。js在util模块中提供了<代码> promisify> 代码来把节点。js风格的回调转换成承诺风格,但显然它不适用于天气风格。还是自己动手吧,也不用考虑太多,比如天气风格的异步调用在形式上都是一致的,它们的特征如下:
<李>使用一个对象传递所有参数,包括三个主要的回调李> <李> <代码>成功:(res)=比;任何代码>在异步方法成功时回调李> <李> <代码>失败:(err)=比;任何代码>在异步方法失败时回调李> <李> <代码>完成:()=比;任何代码>在异步方法完成(不管成功还是失败)时回调李>
所以,如果<代码> wx.abcd() 代码>改成了承诺风格,通过异步/等待来编写,大概应该是这个样子
微信小程序中如何使用异步/等待