微信小程序异步处理详解


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团队打造的javascript单元测试工具QUnit介绍
Feb 26 Javascript
JS调用CS里的带参方法实例
Aug 01 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
Sep 22 Javascript
使用jquery操作session方法分享
Jan 22 Javascript
JS实现自动切换文字的导航效果代码
Aug 27 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
May 09 Javascript
Javascript json object 与string 相互转换的简单实现
Sep 27 Javascript
JS 对java返回的json格式的数据处理方法
Dec 05 Javascript
全面介绍vue 全家桶和项目实例
Dec 27 Javascript
详解ajax的data参数错误导致页面崩溃
Apr 30 Javascript
深入浅析js原型链和vue构造函数
Oct 25 Javascript
详解element-ui设置下拉选择切换必填和非必填
Jun 17 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 图片加水印与上传图片加水印php类
2010/05/12 PHP
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
php 字符串替换的方法
2012/01/10 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
JS 用6N±1法求素数 实例教程
2009/10/20 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
2016/06/17 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
python之wxPython应用实例
2014/09/28 Python
跟老齐学Python之Import 模块
2014/10/13 Python
启动targetcli时遇到错误解决办法
2017/10/26 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
pytorch 共享参数的示例
2019/08/17 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
联想台湾官网:Lenovo TW
2018/05/09 全球购物
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
人事文员岗位职责
2014/02/16 职场文书
出生证明公证书
2014/04/09 职场文书
服务理念标语
2014/06/18 职场文书
实习证明格式范文
2015/06/16 职场文书
师范生见习自我总结
2015/06/23 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL