微信小程序异步处理详解


Posted in Javascript onNovember 10, 2017

本文实例为大家分享了微信小程序异步处理的具体方法,供大家参考,具体内容如下

直接看问题:

微信小程序异步处理详解

然后看打印的结果:

微信小程序异步处理详解

根据上面两图可以看出,代码上先执行的网络请求,再执行打印的变量,但是从下面打印的结果来看,先出结果的是执行打印变量的函数(aafn函数),再打印出网络请求success的回调里返回的数据和赋值后的变量的值;

为什么先执行的aafn,并且打印的值没有赋值上?

因为wx.request是一个异步的请求,所以数据请求的同时,可以继续向下执行函数。所以这里值还没有赋值上就开始打印了变量的值;

这种情况,怎么解决呢?

方法一:

嵌套

在wx.request的success回调里执行aafn函数

微信小程序异步处理详解

然后运行结果

微信小程序异步处理详解

这里就取到值了

但是如果逻辑很复杂,需要用到很多层异步,就像这样:

asyncFn1(function(){
 //...
 asyncFn2(function(){
  //...
  asyncFn3(function(){
   //...
   asyncFn4(function(){
    //...
    asyncFn5(function(){
      //...
    });
   });
  });
 });
});

这样代码看起来就很不好看,代码的可读性和可维护性就不好了

那怎么解决这个问题呢?Promise这种概念的产生,很好地解决了这一切,Promise是什么?这里我就不多说了有兴趣的自己去看一看,Promise介绍链接

先看看Promise的方式:

function asyncFn1(){
 return new Promise(function (resolve, reject) {
  //...
 })
}

// asyncFn2,3,4,5也实现成跟asyncFn1一样的方式...

调用

asyncFn1()
 .then(asyncFn2)
 .then(asyncFn3)
 .then(asyncFn4)
 .then(asyncFn5);

这样的话,异步函数就可以依次执行了

微信小程序的异步API怎么支持Promise呢?我们可以一个一个的用Promise去包装这些API,但是这个还是比较麻烦的。不过,小程序的API的参数格式都比较统一,只接受一个object参数,回调都是在这个参数中设置,所以,这为了统一处理提供了便利,写一个工具方法,来完成这样的工作

首先需要引用一个叫bluebird.js的文件;

进入bluebird官网下载:

微信小程序异步处理详解

这个好像是不能下载的,但是你可以点击进入,然后复制,在小程序里创建一个js文件,将代码复制到这个js里面,然后引用。

然后再写一个JS,里面写工具方法:

微信小程序异步处理详解

下面是prom.js

微信小程序异步处理详解

然后需要使用的那个页面的js里引入prom.js:

微信小程序异步处理详解

调用:

微信小程序异步处理详解

打印结果

微信小程序异步处理详解

这样就可以了,完结。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 锚点跳转滚动条平滑滚动一句话代码
Apr 30 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
Jul 20 Javascript
VBS通过WMI监视注册表变动的代码
Oct 27 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
Mar 17 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
May 10 Javascript
bootstrap table复杂操作代码
Nov 01 Javascript
用angular实现多选按钮的全选与反选实例代码
May 23 Javascript
JS原生数据双向绑定实现代码
Aug 14 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
Apr 12 Javascript
jQuery+PHP实现上传裁剪图片
Jun 29 jQuery
JavaScript Math对象和调试程序的方法分析
May 13 Javascript
axios如何利用promise无痛刷新token的实现方法
Aug 27 Javascript
微信小程序实现选项卡功能
Jun 19 #Javascript
微信小程序实现多宫格抽奖活动
Apr 15 #Javascript
十分钟带你快速了解React16新特性
Nov 10 #Javascript
JS实现移动端整屏滑动的实例代码
Nov 10 #Javascript
Three.js加载外部模型的教程详解
Nov 10 #Javascript
vue2导航根据路由传值,而改变导航内容的实例
Nov 10 #Javascript
three.js加载obj模型的实例代码
Nov 10 #Javascript
You might like
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
表格展示无限级分类(PHP版)
2012/08/21 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
PHP异常处理Exception类
2015/12/11 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
Python中join函数简单代码示例
2018/01/09 Python
TensorFlow损失函数专题详解
2018/04/26 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
医药专业推荐信
2013/11/15 职场文书
大学生实习思想汇报
2014/01/12 职场文书
网络宣传方案
2014/03/15 职场文书
产品质量承诺范本
2014/03/31 职场文书
党支部综合考察材料
2014/05/19 职场文书
邀请函的格式
2015/01/30 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
学雷锋活动简报
2015/07/20 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书