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