微信小程序异步处理详解


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 相关文章推荐
js操作select控件的几种方法
Jun 02 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
Feb 26 Javascript
javaScript(JS)替换节点实现思路介绍
Apr 17 Javascript
面向对象继承实例(a如何继承b问题)(自写)
Jul 01 Javascript
浅析LigerUi开发中谨慎载入common.css文件
Jul 09 Javascript
简单分析javascript中的函数
Sep 10 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
Dec 22 Javascript
用JavaScript和jQuery实现瀑布流
Mar 19 Javascript
Vue.js仿微信聊天窗口展示组件功能
Aug 11 Javascript
vue ssr 实现方式(学习笔记)
Jan 18 Javascript
基于vue中的scoped坑点解说
Sep 04 Javascript
JS实现可以用键盘方向键控制的动画
Dec 11 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中foreach语句控制数组循环的用法
2015/11/30 PHP
javascript新手语法小结
2008/06/15 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
python元组操作实例解析
2014/09/23 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
python实现机器人卡牌
2019/10/06 Python
python manage.py runserver流程解析
2019/11/08 Python
Python3 集合set入门基础
2020/02/10 Python
python离线安装外部依赖包的实现
2020/02/13 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
什么是View State?
2013/01/27 面试题
幼教毕业生自我鉴定
2014/01/12 职场文书
医生进修自我鉴定
2014/01/19 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
美术毕业生求职信
2014/02/25 职场文书
优秀员工演讲稿
2014/05/19 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
公务员政审材料
2014/12/23 职场文书
大学生党员自我评价
2015/03/04 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js