获取地址的代码优化
获取地址的优化处理
未优化前的代码:
//收货地址
handleChooseAddress(){
wx.getSetting({
success: (result) => {
// 属性名怪异的时候 都要使用[]形式来获取属性值
const scopeAddress =result.authSetting["scope.address"];
if (scopeAddress===true||scopeAddress===undefined) {
wx.chooseAddress({
success: (res1) => {
console.log(res1)
}
});
} else {
//用户拒绝过授权
wx.openSetting({
success: (res2)=>{
console.log(res2);
}
});
}
},
fail: () => {},
complete: () => {}
});
}
优化后:
// pages/cart/index.js
import {getSetting,chooseAddress,openSetting} from "../../utils/asyncWx.js";
import regeneratorRuntime from "../../lib/runtime/runtime.js";
Page({
data: {},
onLoad: function (options) {},
//收货地址
async handleChooseAddress(){
// 获取权限状态
const res1=await getSetting();
const scopeAddress=res1.authSetting["scope.address"];
if (scopeAddress===true || scopeAddress===undefined) {
// 调用获取收货地址的api
const res2=await chooseAddress();
console.log(res2);
} else {
// 用户打开授权页面
await openSetting();
const res2=await chooseAddress();
console.log(res2);
}
}
})
/**
*获取用户的收货地址
* 1 绑定点击事件
* 2 获取用户对小程序所授予的权限状态
* 若用户在权限提示框点了确定 suthSetting scope.address是true
* 若用户在权限提示框点了取消 suthSetting scope.address是false
* 若用户从来没有调用
* */
更进一步:
async handleChooseAddress(){
try {
// 获取权限状态
const res1=await getSetting();
const scopeAddress=res1.authSetting["scope.address"];
if (scopeAddress===false) {
// 用户打开授权页面
await openSetting();
}
// 调用获取收货地址的api
const address=await chooseAddress();
//存入缓存
wx.setStorageSync("address", address);
} catch (error) {
console.log(error);
}
}
utils里的asyncWx.js
// promise 形式 getSeting
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);
}
});
})
}