微信小程序异步处理详解


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 scrollTop正解使用方法
Nov 14 Javascript
js验证整数加保留小数点的简单实例
Dec 02 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
javascript中定义类的方法汇总
Dec 28 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
Oct 14 Javascript
JQuery ztree带筛选、异步加载实例讲解
Feb 25 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
Oct 18 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
Dec 13 Javascript
jquery与ajax获取特殊字符实例详解
Jan 08 Javascript
基于JavaScript实现飘落星星特效
Aug 10 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
Oct 26 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
Dec 02 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时间和日期函数详解
2015/05/08 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
Vue中nprogress页面加载进度条的方法实现
2020/11/13 Javascript
小程序实现tab标签页
2020/11/16 Javascript
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
Python模拟随机游走图形效果示例
2018/02/06 Python
将python安装信息加入注册表的示例
2019/11/20 Python
python logging设置level失败的解决方法
2020/02/19 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
阿迪达斯越南官网:adidas越南
2020/07/19 全球购物
介绍一下Mysql的存储引擎
2015/02/12 面试题
财务管理专业毕业生求职信范文
2013/09/21 职场文书
九年级家长会邀请函
2014/01/15 职场文书
《乡愁》教学反思
2014/02/18 职场文书
合作意向协议书范本
2014/03/31 职场文书
意向书范文
2014/03/31 职场文书
教师考核表个人总结
2015/02/12 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
vue实现列表垂直无缝滚动
2022/04/08 Vue.js