云开发wx.cloud.uploadFile异步返回图片顺序错乱,怎样解决图片顺序?
发布于 6 年前 作者 mingguo 589 次浏览 来自 问答

云开发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);
    }
}
回到顶部