实现wx小程序API的 Promise化

  1. 基于回调函数的异步 API 的缺点
    默认状况下,小程序官方提供的异步 API 都是基于回调函数实现的,例如,网络请求的 API 须要按照
    以下的方式调用:
wx.request({ 
 
  
  method: '',
  url: '',
  data: { 
 
  },
  success: () => { 
 
  }, // 成功的回调
  complate: () => { 
 
  }, // 不管成功与否都会执行的回调
  fail: () => { 
 
  } // 失败的回调
})

这种代码的缺点是显而易见的, 容易形成回调地狱的问题,代码的可读性、维护性差!而咱们就想将这
种类型的代码使用 API Promise 化进行改造。
2. 什么是 API Promise 化
API Promise 化,指的是经过额外的配置,将官方提供的、基于回调函数的异步 API ,升级改造为基
于 Promise 的异步 API ,从而提升代码的可读性、维护性,避免回调地狱的问题。
3. 实现 API Promise 化
在小程序中,实现 API Promise 化主要依赖于 miniprogram-api-promise 这个第三方的 npm 包。
它的安装和使用步骤以下:javascript

npm i --save miniprogram-api-promise@1.0.4
- 下载完成,咱们不能直接使用,而是须要再次从新构建npm包
- 建议在构建前先删除原有的miniprogram_npm
- 而后再点击工具,构建npm

导入并执行:java

// 在小程序入口文件中(app.js),只须要调用一次 promisifyAll()方法
// 便可实现异步API 的Promise化
// 按需导入一个方法
import { 
 
   promisifyAll } from 'miniprogram-api-promise'
// 声明一个常量,为一个空对象,
// 并在wx顶级对象下添加一个属性p也指向该空对象,使全部成员均可以使用该对象
const wxp = wx.p = { 
 
  }
// promisify all wx's api
// 参数1: wx顶级对象
// 参数2: wxp指向一个空对象
promisifyAll(wx, wxp)

解释上述代码:
promisifyAll : 作的事就是将 wx 拥有的属性方法都copy并改造了一份给了 wxp 这个对象。
然而, wxp 只是当前 js 文件的一个常量,只能在当前文件使用。
所以:咱们在 wx 上挂载一个属性 p 让他和 wxp 指向同一个空对象。
在其余页面或者组件就能够经过全局对象 wx 点出 p 来访问到 wxp。
此时 wx.p 发起异步的请求时,获得的是一个 promise 对象。
那么咱们就可使用 async/await 简化Promise语法。web