收藏
回答

关于使用云储存上传文件wx.cloud.uploadFile(),成功后返回的fileID顺序错误

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 微信安卓客户端 wx3cbd60d95940d2dd test-01-nkmqa 2.9.2

我的需求:用户选择相册的图片上传,成功后按照当初选择的顺序进行展示;

用户选择图片顺序如下图(从左至右):第一张为宾利汽车

代码如图,用户通过按钮点击触发upImage( )函数

然后我通过打印出来的信息,发现这个云储存返回的图片顺序不对。使用for循环依次上传图片,第一次返回的fileID应该是宾利汽车的fileID才对

结果我到云储存一看,发现云储存返回的第一个fileID是那张女孩图片;可女孩的图片不是还没有上传吗?

经过我多次测试,发现云储存返回的fileID不会按照你传入的图片数组顺序,而是按照图片的体积大小顺序进行返回。

不知道是不是个Bug,希望官方能尽快帮助给我一个解决方案,谢谢!

回答关注问题邀请回答
收藏

4 个回答

  • Admin ²º²⁴
    Admin ²º²⁴
    2020-03-24

    谢邀:

    这个典型的异步问题哈。

    是谁先上传完成谁先分配id的原则

    2020-03-24
    有用 2
    回复 6
    • Garin
      Garin
      2020-03-24
      感谢!请问对应我这个需求,有什么解决这个异步的思路吗?
      2020-03-24
      回复
    • Admin ²º²⁴
      Admin ²º²⁴
      2020-03-24回复Garin
      你的需求:用户选择相册的图片上传,成功后按照当初选择的顺序。
      2 个方案:1是使用Promise.all方式处理异步,参考:
      云开发批量上传图片,上传完图片再上传数据库 [即抄即用,拎包入住] | 微信开放社区
      https://developers.weixin.qq.com/community/develop/article/doc/000a240bfd49008091f9d7c4d56013
      2是在你现在代码上自己用数组做顺序策略,就是把待上传的图片列表保存到一个顺序数组里面,里面存放原图文件路径,同时也保存上传完成后返回的云id,所有的上传完成后,你再顺序读取这个数组里面的图片展示就好了。
      2020-03-24
      2
      回复
    • Garin
      Garin
      2020-03-24回复Admin ²º²⁴
      ok,终于解决了,万分感谢!
      2020-03-24
      回复
    • 会说话的小麋鹿
      会说话的小麋鹿
      2020-08-01回复Garin
      怎么解决的,求代码
      2020-08-01
      回复
    • Garin
      Garin
      2020-08-01回复会说话的小麋鹿
      使用async await 解决异步
      2020-08-01
      回复
    查看更多(1)
  • 维她命系
    维她命系
    2020-03-24

    异步执行没有顺序,和图片大小有关,越大传的越慢,如果需要顺序处理,应该在 wx.cloud.uploadFile 回调里面触发下一个图片上传。

    2020-03-24
    有用 1
    回复 1
    • Garin
      Garin
      2020-03-24
      我不太理解,按照打印结果来看,代码先执行了三次打印“选择的第i张图片”,然后才执行打印“云储存上传的图片”;按照我的代码,不应该打印一次“选择的第i张图片”,紧接着打印“云储存上传的图片”吗,难道异步执行这么鬼畜,连循环都是分开执行?
      2020-03-24
      回复
  • momo
    momo
    2020-03-24

    建议了解下 Promise.all

    2020-03-24
    有用
    回复
  • Garin
    Garin
    2020-03-24

    可能是个Bug?

    2020-03-24
    有用
    回复
登录 后发表内容
问题标签