uniapp开发:图片上传的兼容问题

1,804 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

背景介绍

    公司自己的租房项目【优区生活】需要同时兼容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已联系社区的开发人员处理,希望能早日修复吧。这文也是希望看到的小伙伴能不抓头。我想迫脑袋也没想到会有这问题啊。