微信小程序异步处理详解


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中删除元素的实现代码
Dec 29 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
JS根据年月获得当月天数的实现代码
Jul 03 Javascript
js使用post 方式打开新窗口
Feb 26 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
Mar 03 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
Jan 22 Javascript
Bootstrap框架实现广告轮播效果
Nov 28 Javascript
JavaScript实现经典排序算法之选择排序
Dec 28 Javascript
JavaScript实现旋转轮播图
Aug 18 Javascript
Vue组件创建和传值的方法
Aug 17 Javascript
vue webpack开发访问后台接口全局配置的方法
Sep 18 Javascript
layui实现根据table数据判断按钮显示情况的方法
Sep 26 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下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
vue.js中created方法作用
2018/03/30 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
Python中的模块和包概念介绍
2015/04/13 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
《赠汪伦》教学反思
2014/04/12 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
金陵十三钗观后感
2015/06/04 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
Python极值整数的边界探讨分析
2021/09/15 Python
MySQL优化及索引解析
2022/03/17 MySQL