简介

相信看到这篇文章的同学,都已经对微信小程序的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. [CF603R] Game - 博弈论

    [CF603R] Description 给定 \(N \times N\) 的棋盘,两人轮流放棋子.棋子的上下左右四个格子不能再放棋子.不能操作的人负.判断胜负. Solution 用的是很常见的思 ...

  2. energy/heating data source

    HeatManDataLake 1. schema: hfors tables ambient_temperature_emd record the ambient temperature hourl ...

  3. ms2

    # 准备: robots UA 池 图片懒加载 cookie IP ajax js 加密(js逆向 字体加密/大众点评/ base64 md5 AES python复写 要不就是第三方库执行js代码) ...

  4. NW.js桌面应用开发(一)

    NWjs中文网 Electron中文网 一些需要了解的历史与特性,其实就是 NW.js 和 Electron的争议,建议还是亲自阅读一下各自的官网说明 1.下载SDK版工具 从淘宝NPM镜像下载,速度 ...

  5. 根下var目录迁移

    问题 var目录挂载在根目录下,占用/分区的空间,如果/var/log日志空间过大,将导致/分区空间满,导致系统无法使用. 解决方案 在硬盘上划分单独的分区,挂载到/var目录,并迁移/var目录下的 ...

  6. JQ 遍历--(祖先,后代,同胞,过滤)

    祖先 <style> .one,.one *{ display: block; border: 2px solid lightgrey; color: lightgrey; padding ...

  7. 随缘记录 LeetCode第168场周赛 2019-12-22

    5292. 划分数组为连续数字的集合 给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合. 如果可以,请返回 True:否则,返回 Fals ...

  8. 【算法学习记录-排序题】【PAT A1012】The Best Rank

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  9. 题解【洛谷P1315】[NOIP2011]观光公交

    题目描述 风景迷人的小城 Y 市,拥有 \(n\) 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务. 观光公交车在第 \(0\) 分钟出现在 \( ...

  10. java_获取指定ip的定位

    因为自己网站后台做了一个进站ip统计,之前只是获取了ip,这次优化了下,把ip的大致区域弄出来了 废话不多说,进正题 首先要用到几个网络大头的api 淘宝API:http://ip.taobao.co ...