下面用个例子演示在微信小程序里使用 Promise,async,await 这些东西。小程序里有个 wx.authorize 接口可以向用户要些权限,访问用户对应的资源,比如得到用户的位置,获取用户的相关信息等等。wx.getSetting 这个接口可以得到用户的授权配置信息,比如用户是否已经授权我们使用他的用户信息。
回调
假设在我的小程序想创建个函数可以检查用户的授权信息的状态,比如我想检查用户信息(scope.userInfo)的授权状态,使用回调的形式来定义这个函数,像这样:
const authUserInfo = (callback) => { wx.getSetting({ success: (response) => { if (response.authSetting['scope.userInfo']) { return callback(true) } wx.authorize({ scope: 'scope.userInfo', success: () => { return callback(true) }, fail: () => { return callback(false) } }) } }) }
这样用:
authUserInfo((result) => { console.log(result) })
在 wx.getSetting 的成功回调里,它的 response.authSetting 里面包含的就是授权信息。
Promise
现在我们用 Promise 的形式定义之前的函数,它可以像这样:
const authorize = (setting) => () => { return new Promise((resolve, reject) => { wx.getSetting({ success: (response) => { if (response.authSetting[setting]) { resolve(true) } wx.authorize({ scope: setting, success: () => { resolve(true) }, fail: () => { reject(false) } }) } }) }) }
用函数创建函数:
const authUserInfo = authorize('scope.userInfo')
Promise 的用法:
authUserInfo() .then(() => { console.log('yes') }) .catch(() => { console.log('no') })
async,await
先导入 regenerator-runtime。
import regeneratorRuntime from '../../libs/regenerator-runtime'
用法:
async onTapSubmitButton () { try { await authUserInfo() console.log('yes') } catch (error) { console.log('no') } }
文章参考了“一斤代码” 的文章,与 “Aki” (宁皓 QQ 群里她叫喵~)提供的小程序模板。
评论
学习了
7 年 4 周 以前
真的不是来打广告的,我写了一个promise库,是将小程序api转换成promise API,调用的时候,只需要全局引入 wxPromise,然后用 wx.pro 调用方法即可。看了您的文章,对我继续开发该库受益匪浅:https://github.com/youngjuning/wxPromise
6 年 8 个月 以前
谢谢啦 :)
6 年 8 个月 以前