我的需求:用户选择相册的图片上传,成功后按照当初选择的顺序进行展示;
用户选择图片顺序如下图(从左至右):第一张为宾利汽车
代码如图,用户通过按钮点击触发upImage( )函数
然后我通过打印出来的信息,发现这个云储存返回的图片顺序不对。使用for循环依次上传图片,第一次返回的fileID应该是宾利汽车的fileID才对
结果我到云储存一看,发现云储存返回的第一个fileID是那张女孩图片;可女孩的图片不是还没有上传吗?
经过我多次测试,发现云储存返回的fileID不会按照你传入的图片数组顺序,而是按照图片的体积大小顺序进行返回。
不知道是不是个Bug,希望官方能尽快帮助给我一个解决方案,谢谢!
谢邀:
这个典型的异步问题哈。
是谁先上传完成谁先分配id的原则
2 个方案:1是使用Promise.all方式处理异步,参考:
云开发批量上传图片,上传完图片再上传数据库 [即抄即用,拎包入住] | 微信开放社区
https://developers.weixin.qq.com/community/develop/article/doc/000a240bfd49008091f9d7c4d56013
2是在你现在代码上自己用数组做顺序策略,就是把待上传的图片列表保存到一个顺序数组里面,里面存放原图文件路径,同时也保存上传完成后返回的云id,所有的上传完成后,你再顺序读取这个数组里面的图片展示就好了。
异步执行没有顺序,和图片大小有关,越大传的越慢,如果需要顺序处理,应该在 wx.cloud.uploadFile 回调里面触发下一个图片上传。
建议了解下 Promise.all
可能是个Bug?