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