简介

相信看到这篇文章的同学,都已经对微信小程序的api文档有所了解了,也都经历了微信小程序api回调函数嵌套的痛苦,才会想要通过Promise解决回调地狱这个问题,我下面就直接介绍怎么在小程序中使用promise。

历史问题

很多同学肯定看到一些介绍微信小程序中使用Promise的文章,告诉你说微信小程序不支持Promise,需要自己引入es6-promise,或者需要使用一些第三方的promise,就我看到的如bluebird等,老版本的微信小程序应该是不支持es6中的Promise的,但是2018年以后的微信小程序肯定是支持的,所以可以直接使用,不需要再引入第三方的Promise了。另外如果还不了解什么是Promise的话,建议自行查找相应的Promise介绍与使用方法。

使用说明

首先可以在util.js文件中定义函数wxPromisify,这个函数的作用就是把小程序api使用Promise进行包裹,从而使用时可以以Promise的优势书写代码

/**
* wxPromisify
* @fn 传入的函数,如wx.request、wx.download
*/ function wxPromisify(fn) {
return function (obj = {}) {
return new Promise((resolve, reject) => {
obj.success = function (res) {
resolve(res)
} obj.fail = function (res) {
reject(res)
} fn(obj)//执行函数,obj为传入函数的参数
})
}
} module.exports = {
wxPromisify: wxPromisify
}

下面介绍wxPromisify函数的使用

var Promisify = require('./utils.js')//具体引入路径根据具体情况
var getSystemInfo = Promisify.wxPromisify(wx.getSystemInfo);//获取系统信息
var getUserInfo = Promisify.wxPromisify(wx.getUserInfo);//获取用户信息
var downloadFile = Promisify.wxPromisify(wx.downloadFile);//预下载文件
var request = Promisify.wxPromisify(wx.request);//ajax请求

上面的代码就是通过wxPromisify函数重新定义了小程序的api

在你需要使用Promise的js文件内或者直接在util.js中定义新构建的函数都是可以的

重新定义函数后的使用方法如下代码所示

getUserInfo()
.then(res =>{
console.log(res)
}) request({
url: 'https://xindongpeixun.com/auth/news/page',
method: 'GET',
header:{
'content-type': 'json'
}
}).then(res => {
console.log(res.data.data.records)
getUserInfo()
.then(res =>{
console.log(res)
})
})

上面一段代码分别表现了两种情况,一种是直接使用,另一种是函数嵌套的使用以及参数的传递。

小结

上面这种方法虽然看似使用了Promise,解决了回调地狱代码复杂难以阅读的问题,但是实际上只是简单地对小程序的api进行了包裹,我个人觉得应该还有更好的方法,只是我暂时也不知道还应该采用什么方式可以更好的书写,如果有人有好的方法,欢迎留下评论或者截图,谢谢。

微信小程序中promise的使用的更多相关文章

  1. 在微信小程序中使用富文本转化插件wxParse

    在微信小程序中我们往往需要展示一些丰富的页面内容,包括图片.文本等,基本上要求能够解析常规的HTML最好,由于微信的视图标签和HTML标签不一样,但是也有相对应的关系,因此有人把HTML转换做成了一个 ...

  2. 微信小程序中同步 异步的使用

    https://www.jianshu.com/p/e92c7495da76   微信小程序中使用Promise进行异步流程处理 https://www.cnblogs.com/cckui/p/102 ...

  3. 微信小程序中使用Async-await方法异步请求变为同步请求

    微信小程序中有些 Api 是异步的,无法直接进行同步处理.例如:wx.request.wx.showToast.wx.showLoading等.如果需要同步处理,可以使用如下方法: 注意: Async ...

  4. 在微信小程序中使用redux

    本文主要讲述,在微信小程序中如何使用redux DEMO 需要解决的问题 如何在小程序中引入redux状态管理库,及它相关的插件? 微信小程序没有清晰的异步api,便于thunkMiddleware处 ...

  5. WeChat-SmallProgram:微信小程序中使用Async-await方法异步请求变为同步请求

    微信小程序中有些 Api 是异步的,无法直接进行同步处理.例如:wx.request.wx.showToast.wx.showLoading 等.如果需要同步处理,可以使用如下方法: 提示:Async ...

  6. 网页或微信小程序中使元素占满整个屏幕高度

    在项目中经常要用到一个容器元素占满屏幕高度和宽度,然后再在这个容器元素里放置其他元素. 宽度很简单就是width:100% 但是高度呢,我们知道的是height:100%必须是在父元素的高度给定了的情 ...

  7. 微信小程序中发送模版消息注意事项

    在微信小程序中发送模版消息 参考微信公众平台Api文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理 此参考地址 ...

  8. 微信小程序中placeholder的样式

    通常,现代浏览器大多支持::placeholder选择器,用于设置placeholder的样式,但是在微信小程序中并不支持这种方式,而是提供了一个专门的属性(placeholder-class)来处理 ...

  9. 微信小程序中转义字符的处理

    在微信小程序开发过程中,有时候会用到常用的一些特殊字符如:‘<’.‘>’.‘&’.‘空格’等,微信小程序同样支持对转义字符的处理,下面提供两种方法用来处理微信小程序中转义字符的处理 ...

随机推荐

  1. C short类型的内存分析

    #include<stdio.h> #include<limits.h> void main(){ //printf("short%d, int%d, long%d ...

  2. SpringBoot+springDataJpa实现单表字段动态部分更新

    写在前面 所谓的动态部分更新是指:并非对数据记录的所有字段整体更新,而是知道运行时才确定哪个或者哪些字段需要被更新. 1)Spring Data Jpa对于Entity的更新,是对数据表中Entity ...

  3. 线程同步器CountDownLatch

    Java程序有的时候在主线程中会创建多个线程去执行任务,然后在主线程执行完毕之前,把所有线程的任务进行汇总,以前可以用线程的join方法,但是这个方法不够灵活,我们可以使用CountDownLatch ...

  4. python:函数中的*args与**kwargs

    首先定义一个包含*args和**kwargs的函数,这个函数唯一的功能就是输出自己的两个参数,以此来理解*args和**kwargs def myFunc(*args, **kwargs): prin ...

  5. django初步了解(一)

    安装django pip3 install django==版本号 创建一个djangp项目 django-admin startproject 项目名 目录介绍: 运行django项目: pytho ...

  6. 【算法学习记录-排序题】【PAT A1016】Phone Bills

    A long-distance telephone company charges its customers by the following rules: Making a long-distan ...

  7. hfs 文件存储

    hfs 服务器上面的和本地拖上去的文件是同一个文件.对本地文件拖上去之后再修改,服务器文件也会修改.所以服务器要有一个自己的文件存放.

  8. 算法竞赛入门经典第二版 回文词P49

    #include<bits/stdc++.h> using namespace std; char rev[]="A 3 HIL JM O 2TUVWXY51SE Z 8 &qu ...

  9. hadoop学习笔记(九):mr2HA高可用环境搭建及处步使用

    本文原创,如需转载,请注明原文链接和作者 所用到的命令的总结: yarn:启动start-yarn.sh   停止stop-yarn.sh zk :zkServer.start ;:zkServer. ...

  10. 深入理解JDK、JRE(两套)、JVM、以及不同目录下的java.exe

    内容来自:http://blog.sina.com.cn/s/blog_7ffb8dd501011sgc.html 1.jdk下bin目录里的java.exe与外部jre中的java.exe的秘密   ...