微信小程序异步处理详解


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的.live()和.die() 使用介绍
Sep 10 Javascript
一行代码告别document.getElementById
Jun 01 Javascript
js弹出窗口之弹出层的小例子
Jun 17 Javascript
Javascript单元测试框架QUnitjs详细介绍
May 08 Javascript
javascript浏览器窗口之间传递数据的方法
Jan 20 Javascript
jQuery旋转木马式幻灯片轮播特效
Dec 04 Javascript
Ajax 加载数据 练习代码
Jan 05 Javascript
BootStrap表单验证实例代码
Jan 13 Javascript
Vue自定义指令详解
Jul 28 Javascript
Angularjs使用过滤器完成排序功能
Sep 20 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
Oct 12 Javascript
vue生命周期钩子函数以及触发时机
Apr 26 Vue.js
微信小程序实现选项卡功能
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
根德YB400的电路分析
2021/03/02 无线电
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
解决在Laravel 中处理OPTIONS请求的问题
2019/10/11 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
python、java等哪一门编程语言适合人工智能?
2017/11/13 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
python中bytes和str类型的区别
2019/10/21 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
python 实现目录复制的三种小结
2019/12/04 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
中专毕业生自我鉴定
2013/11/21 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
春游踏青活动方案
2014/08/14 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书