微信小程序异步处理详解


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 异步调用框架 (Part 5 - 链式实现)
Aug 04 Javascript
JavaScript中5种调用函数的方法
Mar 12 Javascript
JS实现自动变换的菜单效果代码
Sep 09 Javascript
JavaScript的this关键字的理解
Jun 18 Javascript
layer弹出层框架alert与msg详解
Mar 14 Javascript
element-ui 中的table的列隐藏问题解决
Aug 24 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
Oct 16 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
May 30 Javascript
解决 window.onload 被覆盖的问题方法
Jan 14 Javascript
微信小程序 scroll-view的使用案例代码详解
Jun 11 Javascript
基于JS实现操作成功之后自动跳转页面
Sep 25 Javascript
vue 实现基础组件的自动化全局注册
Dec 25 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
数字转英文
2006/12/06 PHP
php连接mysql数据库代码
2009/03/10 PHP
PHP 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
JavaScript 特殊字符
2007/04/05 Javascript
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
从Python的源码来解析Python下的freeblock
2015/05/11 Python
12步教你理解Python装饰器
2016/02/25 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
匡威德国官网:Converse德国
2019/01/26 全球购物
意大利男装网店:Vrients
2019/05/02 全球购物
父亲追悼会答谢词
2014/01/17 职场文书
小学生环保标语
2014/06/13 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
2016关于军训的心得体会
2016/01/11 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
Java中使用Filter过滤器的方法
2021/06/28 Java/Android