最近在公司中负责微信小程序的工作,发现小程序中经常会用到获取用户信息等功能。而wx.login、wx.getSetting等小程序的API都是回调函数的形式。而获取用户信息需要wx.login(获取code)、通过code到后台请求userId、wx.getSetting获取用户设置和wx.getUserInfo四个步骤。造成的回调嵌套太过于繁琐,就想着能不能把回调形式封装一下,以Promise的方式返回。其中wx.request由于涉及到传参,与其它API在封装时稍有差异。
这里借鉴了思否上一篇文章的写法传送门
promise.js
function promisify(api) {
return (options, params) => {
return new Promise((resolve, reject) => {
api(Object.assign({}, options, {
success: res => resolve(res),
fail: res => reject(res)
}, params))
})
}
}
module.exports.promisify = promisify
引入promise.js,以ws.login为例
const pro = require('./promise.js').promisify
const login = pro(ws.login)
login().then(res => {
console.log(res.data)
}).catch(res => {
console.log(res.errMsg)
})