wxtools
1.0.0
yarn add @evolify/wxtools
或者
npm i @evolify/wxtools
把wx.request封裝成了Promise風格的。使用的時候使用get、post等方法即可。支援新增攔截器,可以單獨設定header、token、baseUrl等。下面以post方法為例。
引入js檔案:
import { request as req } from '@evolify/wxtools'
配置Request,一般在小程式App.js>onLaunch方法中配置
configReq ( ) {
//配置baseUrl和拦截器,baseUrl例如 /api
req . baseUrl ( config . serverUrl )
. interceptor ( res => {
switch ( res . data . code ) {
case 401 :
wx . showToast ( {
icon : 'loading' ,
title : '重新登录' ,
} )
this . login ( )
return false ;
case 0 :
return true ;
default :
wx . showToast ( {
title : '操作失败' ,
} )
return false ;
}
} )
} ,
登入成功後設定token
req . token ( token )
發起網路請求
req . post ( '/goods' , data , header )
. then ( res => res . data . data )
. then ( data => {
wx . showToast ( {
title : '创建成功'
} )
} )
wx api裡面很多操作都是非同步的,基本上參數形式都差不多.這裡做了Promise封裝,方法名稱、參數和官方api一致,只是參數裡面不用傳success、fail回呼。以showToast為例,簡單對比一下:
常規用法:
wx . showToast ( {
title : '成功' ,
icon : 'success' ,
duration : 2000 ,
success : ( ) => {
console . log ( '调用成功' )
} ,
fail : err => {
console . error ( '调用失败' , err )
}
} )
Promise用法:
import { Wx } from '@evolify/wxtools'
Wx . showToast ( {
title : '成功' ,
icon : 'success' ,
duration : 2000 ,
} ) . then ( ( ) => {
console . log ( '调用成功' )
} ) . catch ( err => {
console . error ( '调用失败' , err )
} )
其他的api用法都一樣,方法、參數、回傳值可以參考官方文件。如果有錯誤或有缺失的,歡迎提issue.
import { promisify } from '@evolify/wxtools'
function func ( {
param1 ,
param2 ,
success : ( ) => { } ,
fail : ( ) => { }
} ) {
// do something
success ( )
}
const promisifyFunc = params => promisify ( func , params )
// then you can use
promisifyFunc ( data )
. then ( res => {
// on success
} )
. catch ( err => {
// on failed
} )
// instand of
func ( {
... data ,
success : res => {
} ,
fail : res => {
}
} )
有些場景,我們需要定義一序列的延時任務,比如就界面動畫而言,一些元素依次進場,並且有一定間隔,這時候如果我們直接用setTimeout, 就會遇到毀掉地獄的問題,代碼很難看,且難以維護。這裡封裝了一個工具,可解決這類問題,具體介紹請參考文章:js定時任務佇列,用法如下:
import { Schedule } from '@evolify/wxtools'
new Schedule ( ) . task ( task1 )
. delay ( 1000 ) . task ( ( ) => this . setData ( { title : 'Shedule' } ) )
. delay ( 500 ) . task ( task3 )