云开发wx.cloud.uploadFile异步返回图片顺序错乱,怎样解决图片顺序?
云开发wx.cloud.uploadFile异步返回图片顺序错乱,怎样解决图片顺序,有没有代码片段观摩一下,有人指点用递归,不会用,给官方也请教多次,如泥牛入海,全网无实例,无一段代码可供参考,这个问题好像没几个人问,觉得太简单,可是最简单的往往用得最多,难道大家都只上传一张图片吗?请教各位指点。
2 回复
你好,可以参考如下代码,main函数是整个过程的发起,upload是单独执行上传流程,check是收尾检查
main(){
//建立一个公共的数组,各个函数都可以拿到
this.arr = [
{
cloudPath:'../file1.txt',//云端保存的位置
filePath:'http://tmp/ashdhfhkladshjdfadsf',//本地文件路径
upload:false//是否上传完毕
},
{
cloudPath:'../file2.txt',
filePath:'http://tmp/ashdhfhkladshjdfadsf',
upload:false
}
];
for(let i in this.arr){//异步发起整个图片上传
this.upload(i);
}
},
upload(id){
let that = this;
//上传文件
wx.cloud.uploadFile({
cloudPath: that.arr[id].cloudPath,
filePath: that.arr[id].filePath,
success: res => {
//成功后,执行check函数
that.check(res.fileID,id);
},
fail: err => {
//如果上传失败,应该就是短暂的网络问题延迟,可以加点判断重新发起
that.upload(cloudPath,filePath);
}
})
},
check(fileID,id){//每一次上传完都要执行一遍
//把文件设定为上传完成
this.arr[id].upload=true;
//云端路径更新为fileID
this.arr[id].cloudPath=fileID;
//所有都完成指引,默认true,都完成了
let flag = true;
//检查一下所有的都上传完毕了嘛
for(let i in this.arr){
//有一个没有上传
if(this.arr[i].upload==false){
//完成指引置为false
flag = false;
break;
}
}
//仍然是true,则完成
if(flag){
//在这里完成整个上传的流程,可以存数据库了
console.log('上传完成,文件数据为',this.arr);
}
}