問題描述
在app.vue里面onLaunch中獲取openid和token,獲取成功之后宿稀,進(jìn)入頁面調(diào)數(shù)據(jù)接口報(bào)錯趁舀,因?yàn)閠oken沒有帶過去,為了讓頁面在onLaunch執(zhí)行完之后再去頁面調(diào)接口
解決方案
way1
在main.js里面添加
Vue.prototype.$onLaunched = new Promise(resolve => {
Vue.prototype.$isResolve = resolve
})
然后再app.vue的onLaunch里面加this.$isResolve()
onLaunch () {
// #ifndef H5
uni.login({
success: loginRes => {
// #ifdef MP-WEIXIN
login({ // 該接口為我們自己寫的獲取 openid/token 的接口祝沸,請?zhí)鎿Q成自己的
appId: 'wx1234567890',
code: loginRes.code
}).then(res => {
try {
console.info(res.object.token)
uni.setStorageSync('mcToken', res.object.token)
this.$isResolve()
} catch (e) {
console.error(e)
}
})
// #endif
}
})
// #endif
}
再自己的業(yè)務(wù)頁面onLoad中增加await this.$onLaunched
async onLoad(option) {
//等待登錄成功
await this.$onLaunched;
// 后續(xù)業(yè)務(wù)邏輯
},
需要注意的是onload前面要加async矮烹,否則編譯不過去
way2
首先再main.js里面增加
//頁面入?yún)ption
//自己的業(yè)務(wù)邏輯
//如果是ajax,注意要加同步等待
await Vue.prototype.http.post('/customer/updateLastVisitStoreId',{lastVisitStoreId:storeId}).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
})
}
然后再業(yè)務(wù)頁面onload增加
async onLoad(option) {
await this.$visitStore(option);//同步執(zhí)行這個(gè)方法
}
微信圖片_20211208152033.png