知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產生價值,我們在追求其視覺表現(xiàn)的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
微信小程序 API promisify 及后端接口統(tǒng)一管理
發(fā)表時間:2021-1-4
發(fā)布人:葵宇科技
瀏覽次數(shù):95
API promisify
微信小程序幾乎所有的 API 都是采用回調的形式,很容易陷入“回調地獄”,完全享受不到“現(xiàn)代化”的異步編程 Promise、async/await 所帶來的優(yōu)勢。
我們可以對微信小程序的 API Promise 化。
// 封裝
export const getImageInfo = (src) => {
return new Promise((success, fail) => wx.getImageInfo({ src, success, fail }))
}
// 使用
const getBg = getImageInfo(bgUrl)
const getAvatar = getImageInfo(avatarUrl)
Promise.all([getBg, getAvatar]).then(([bg, avatar]) => {
// ...
})
復制代碼
進一步的,我們可以將一些常用的 API 進行封裝:
// utils/promisify.js
/**
* 獲取圖片信息,網(wǎng)絡圖片需先配置 download 域名才能生效。
* @param {String} src
*/
export const getImageInfo = (src) => {
return new Promise((success, fail) => wx.getImageInfo({ src, success, fail }))
}
/**
* 保存圖片到系統(tǒng)相冊
* @param {Object} options
*/
export const saveImageToPhotosAlbum = (options) => {
return new Promise((success, fail) => wx.saveImageToPhotosAlbum({ ...options, success, fail }))
}
// ...
復制代碼
miniprogram-api-promise
在生產中,推薦直接使用 npm 包 miniprogram-api-promise,其原理也是使用 Promise 對 API 進行了一次封裝:
源碼見 node_modules/miniprogram-api-promise/src/promise.js
npm install --save miniprogram-api-promise
復制代碼
import { promisifyAll, promisify } from 'miniprogram-api-promise';
// promisify all wx's api
const wxp = {}
promisifyAll(wx, wxp)
console.log(wxp.getSystemInfoSync())
wxp.getSystemInfo().then(console.log)
wxp.showModal().then(wxp.openSetting())
// compatible usage
wxp.getSystemInfo({success(res) {console.log(res)}})
// promisify single api
promisify(wx.getSystemInfo)().then(console.log)
復制代碼
wx.request
封裝 wx.request
是微信小程序最常用的 API 之一,請求的參數(shù)較多,請求結束后的操作又是通過回調函數(shù)來完成的,多有不便。
下面對該 API 進行封裝,使其支持 Promise:
// utils/request.js
/**
* promisify wx.request
* @param {String} baseURL 域名
* @param {String} url 請求路徑
* @param {Object} data 請求參數(shù)
* @param {String} method 請求方法
*/
class Request {
constructor(params) {
this.withBaseURL = params.withBaseURL
this.baseURL = params.baseURL
}
get(url, data) {
return this.request('GET', url, data)
}
post(url, data) {
return this.request('POST', url, data)
}
request(method, url, data) {
return new Promise((resolve, reject) => {
wx.request({
method,
data,
url: this.withBaseURL ? this.baseURL + url : url,
header: getApp().globalData.getHeader(),
success: (res) => resolve(res),
fail: (err) => reject(err),
})
})
}
}
export default new Request({
withBaseURL: true,
baseURL: getApp().globalData.host,
})
復制代碼
后端接口統(tǒng)一管理
為了便于管理,我們往往會將項目中使用到的 HTTP 請求放到一起進行維護:
// apis/user.js
import request from '../utils/request'
export const addUser = (data) => request.post('/user/add', data)
export const getUserList = (data) => request.get('/user/list', data)
export const getUserInfo = (data) => request.get('/user/info', data)
復制代碼
// apis/product.js
import request from '../utils/request'
export const addProduct = (data) => request.post('/product/add', data)
export const getProductList = (data) => request.get('/product/list', data)
export const getProductDetail = (data) => request.get('/product/detail', data)
相關案例查看更多
相關閱讀
- 買小程序被騙
- 汽車報廢軟件
- web學習路線
- 汽車報廢回收
- 網(wǎng)站優(yōu)化
- 昆明網(wǎng)站制作
- 網(wǎng)站建設列表網(wǎng)
- 云南網(wǎng)站建設方案 doc
- 專業(yè)網(wǎng)站建設公司
- 文山小程序開發(fā)
- 云南網(wǎng)站建設服務公司
- 云南網(wǎng)站建設價格
- 云南建站公司
- 云南小程序定制
- 云南網(wǎng)站建設專家
- 大理小程序開發(fā)
- 模版信息
- 云南省建設廳網(wǎng)站
- 云南軟件定制
- 云南網(wǎng)站建設列表網(wǎng)
- 霸屏推廣
- 云南軟件定制公司
- 電商網(wǎng)站建設
- 全國前十名小程序開發(fā)公司
- 云南網(wǎng)絡營銷顧問
- 云南小程序被騙
- 云南省城鄉(xiāng)建設廳網(wǎng)站
- 云南軟件開發(fā)
- 高端網(wǎng)站建設公司
- 云南小程序開發(fā)