小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
背景介绍
公司自己的租房项目【优区生活】需要同时兼容IOS、Android以及小程序,所以前任程序员大胆选择了uni-app作为开发框架,其他的不好讲,uni-app的兼容问题还是不少的,这不,前不久改了个需求给改出问题了。
项目内支持用户出租&找房,应用内聊天,但是服务器容量有限,所以根据以往数据,做了每个用户最大上传资源的限制,前端这边的表现为在用户上传前先通过API检测当前用户剩余可用的资源空间。
多个页面都需要调用这一API做检测,所以将其写在App.vue中作为一个公共方法调用。
// App.vue
mounted(){
async checkLeftSourceCount(type = 1){
return new Promise((resolve, reject) => {
let fingerId, leftcount = 0;
this.getUniqueId().then(res => {
fingerId = res.fingerId;
this.$utils.request(`/targetUrl?key=value`)
.then(res => {
resolve(res)
})
.catch(err => {
reject(err)
})
});
})
}
}
公共方法写好之后就是在对应的界面中直接调用了。
async choosePhoto() {
await getApp().checkLeftSourceCount(3)
.then(res => {
this.photoMaxNum = res;
})
.catch(err => {
this.photoMaxNum = 0;
this.openError(err)
});
if(!this.photoMaxNum) return
// 选择上传图片的代码
uni.chooseImage({})
}
在WEB中可以正常打开选择框选择图片上传,但是在双端的APP中则会出现点击无反应的情况,断点检查能发现走到了调用uni.chooseImage的函数中,但是不会调用API。
在社区当中找了很多帖子,其中一篇2017年的帖子提到如果在异步函数中调用的话,会出现API不可用的情况,四年前的帖子,我都以为这bug修复了,但实在找不到问题了,就还是试了试。
在测试之前检测结果,执行到选择图片的部分是已经执行完了checkLeftSourceCount()函数的。
于是我讲检测的函数代码复制到当前界面中,不调用公共方法来检测,真机调试没问题。
目前这一bug已联系社区的开发人员处理,希望能早日修复吧。这文也是希望看到的小伙伴能不抓头。我想迫脑袋也没想到会有这问题啊。