个人最近在微信小程序开发时,写的一个通用的权限接口信息获取方法,在uni-app环境下测试通过,希望能帮助到大家!
使用方法:函数参数interfaceName指的是小程序的接口名称,如
wx.getLocation
,interfaceName指的就是getLocation
,当获取权限成功时通过Promise resolve(res)
返回,res为对应接口的返回值(获取值可能存在失败情况,需要自己判断),而无权获取信息时通过Promise reject(r)
返回,可以做后续页面显示。
function getInterfaceInfo(interfaceName) { const authorizationMap = { 'getUserInfo' : 'scope.userInfo' , 'getLocation' : 'scope.userLocation' , 'chooseLocation' : 'scope.userLocation' , 'chooseAddress' : 'scope.address' , 'chooseInvoiceTitle' : 'scope.invoiceTitle' , 'chooseInvoice' : 'scope.invoice' , 'getWeRunData' : 'scope.werun' , 'startRecord' : 'scope.record' , 'saveImageToPhotosAlbum' : 'scope.writePhotosAlbum' , 'saveVideoToPhotosAlbum' : 'scope.writePhotosAlbum' , 'camera' : 'scope.camera' } return new Promise((resolve, reject) => { const scopeName = authorizationMap[interfaceName] uni.getSetting({ success: (res) => { console.log(`get user ${scopeName} setting:`, res) if (scopeName in res.authSetting) { // 判断用户是否已经有权限 if (res.authSetting[scopeName]) { console.log( 'authorize result:' , res) uni[interfaceName]({ success: (res) => { console.log( 'get user setting data success:' , res) resolve(res) }, fail: (r) => { console.log( 'get user setting data fail:' , res) resolve(r) } }) } else { reject(res) } } else { uni.authorize({ scope: scopeName, success: (res) => { console.log( 'authorize result:' , res) uni[interfaceName]({ success: (res) => { console.log( 'get user setting data success:' , res) resolve(res) }, fail: (r) => { console.log( 'get user setting data fail:' , res) resolve(r) } }) }, fail: (r) => { console.log( 'fail:' , r) reject(r) } }) } }, fail: (r) => { reject(r) } }) }) } |
调用getInterfaceInfo后,怎么用返回的值给页面的data赋值呢
回调函数会返回接口值,你再使用setData设置数据就行。