一、Utils/asyncWx.js
/**
* promise 形式 getSetting
*/
export const getSetting = () => {
return new Promise((resolve, reject) => {
wx.getSetting({
success: (result) => {
resolve(result);
},
fail: (err) => {
reject(err);
}
});
})
}
/**
* promise 形式 chooseAddress
*/
export const chooseAddress = () => {
return new Promise((resolve, reject) => {
wx.chooseAddress({
success: (result) => {
resolve(result);
},
fail: (err) => {
reject(err);
}
});
})
}
/**
* promise 形式 openSetting
*/
export const openSetting = () => {
return new Promise((resolve, reject) => {
wx.openSetting({
success: (result) => {
resolve(result);
},
fail: (err) => {
reject(err);
}
});
})
}
/**
* promise 形式 showModal
* @param {object} param0 参数
*/
export const showModal = ({
content
}) => {
return new Promise((resolve, reject) => {
wx.showModal({
title: '提示',
content: content,
success: (res) => {
resolve(res);
},
fail: (err) => {
reject(err);
}
})
})
}
/**
* promise 形式 showToast
* @param {object} param0 参数
*/
export const showToast = ({
title
}) => {
return new Promise((resolve, reject) => {
wx.showToast({
title: title,
icon: 'none',
success: (res) => {
resolve(res);
},
fail: (err) => {
reject(err);
}
})
})
}
/**
* promise 形式 login
*/
export const login = () => {
return new Promise((resolve, reject) => {
wx.login({
timeout: 10000,
success: (result) => {
resolve(result);
},
fail: (err) => {
reject(err);
}
});
})
}
/**
* promise 形式的 小程序的微信支付
* @param {object} pay 支付所必要的参数
*/
export const requestPayment = (pay) => {
return new Promise((resolve, reject) => {
wx.requestPayment({
...pay,
success: (result) => {
resolve(result)
},
fail: (err) => {
reject(err);
}
});
})
}
二、使用
1.业务逻辑
获取用户对小程序所授予获取地址的权限、状态 scope
1)假设用户点击获取收货地址的提示框
确定 authSetting scope.address:
scope 值 true 直接调用 获取收货地址
2)假设用户从来没有调用过收货地址的api
scope undefined 直接调用 获取收货地址
3)假设用户点击获取收货地址的提示框 取消
scope 值 false
- 诱导用户 自己 打开 授权设置页面(wx.openSetting) 当用户重新给与 获取地址权限的时候
- 获取收货地址
4)把获取到的收货地址存入到本地存储中
2.引入
import { getSetting, chooseAddress, openSetting, showModal ,showToast} from "../../utils/asyncWx.js";
3.具体代码
// 点击 收货地址
async handleChooseAddress() {
try {
// 1 获取 权限状态
const res1 = await getSetting();
const scopeAddress = res1.authSetting["scope.address"];
// 2 判断 权限状态
if (scopeAddress === false) {
await openSetting();
}
// 4 调用获取收货地址的 api
let address = await chooseAddress();
address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;
// 5 存入到缓存中
wx.setStorageSync("address", address);
} catch (error) {
console.log(error);
}
},