在微信小程序中,很多内置函数(如 wx.request、wx.getStorage 等)并不直接返回 Promise 对象,而是通过回调函数的方式返回结果。不过,你可以将这些回调函数风格的 API 封装成返回 Promise 的函数,以便于使用 async/await 语法或者更好地进行链式调用。
1. 封装 wx.request
function request(options) { return new Promise((resolve, reject) => { wx.request({ ...options, success: (res) => resolve(res), fail: (err) => reject(err), }); }); } // 使用示例 request({ url: 'https://example.com/api', method: 'GET', }) .then(response => { console.log('请求成功:', response); }) .catch(error => { console.error('请求失败:', error); });
2. 封装 wx.getStorage
function getStorage(key) { return new Promise((resolve, reject) => { wx.getStorage({ key: key, success: (res) => resolve(res.data), fail: (err) => reject(err), }); }); } // 使用示例 getStorage('userInfo') .then(data => { console.log('获取缓存成功:', data); }) .catch(error => { console.error('获取缓存失败:', error); });
3. 封装 wx.setStorage
function setStorage(key, data) { return new Promise((resolve, reject) => { wx.setStorage({ key: key, data: data, success: () => resolve(), fail: (err) => reject(err), }); }); } // 使用示例 setStorage('userInfo', { name: 'John' }) .then(() => { console.log('设置缓存成功'); }) .catch(error => { console.error('设置缓存失败:', error); });
4. 封装 wx.getUserInfo
function getUserInfo() { return new Promise((resolve, reject) => { wx.getUserProfile({ desc: '用于完善会员资料', success: (res) => resolve(res.userInfo), fail: (err) => reject(err), }); }); } // 使用示例 getUserInfo() .then(userInfo => { console.log('获取用户信息成功:', userInfo); }) .catch(error => { console.error('获取用户信息失败:', error); });
注意事项
错误处理: 使用 Promise 封装时,请确保处理好 reject 情况,以便于捕获并处理可能发生的错误。
兼容性: 封装后的 Promise 方法在支持 Promise 的环境下(如现代浏览器、Node.js 等)都能正常使用。