微信小程序异步处理详解


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 相关文章推荐
JavaScript 事件冒泡简介及应用
Jan 11 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
Apr 26 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
Oct 16 Javascript
jQuery控制frames及frame页面JS的方法
Mar 08 Javascript
Javascript实现倒计时(防页面刷新)实例
Dec 13 Javascript
BootStrap 导航条实例代码
May 18 Javascript
AngularJS中filter的使用实例详解
Aug 25 Javascript
微信小程序实现导航栏选项卡效果
Jun 19 Javascript
Java设计中的Builder模式的介绍
Mar 22 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
Jul 07 Javascript
通过原生vue添加滚动加载更多功能
Nov 21 Javascript
JS实现简易贪吃蛇游戏
Aug 24 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
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
javascript天然的迭代器
2010/10/29 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
vue+element tabs选项卡分页效果
2020/06/29 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
python面试题之列表声明实例分析
2019/07/08 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
法人授权委托书公证范本
2014/09/14 职场文书
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL