收藏
回答

来帮我看看把,新手实在不知道错哪了?

出现的问题是3个数据在数组imgArr,filelist只能获得1个,是不是我的写法有问题,求大佬

代码如下:

senEmail_new(){
  var that = this;
  let promiseArr = []
  for (let i=0 ,len=this.data.imgArr.length; i<len; i++){
  let p = new Promise((resolve,reject)=>{
  //var that = this;
  const filePath = this.data.imgArr[i].path//定义文件地址
  const filename = this.data.imgArr[i].name//文件名
  const cloudPath = 'user_file/'+Math.random()+filename.match(/\.[^.]+?$/)[0]
  const imageIDNow = that.data.filelist;
    wx.cloud.uploadFile({
      cloudPath,//云存储地址
      filePath,//文件地址
      successres => {
        console.log('上传成功',i,res)
        imageIDNow = imageIDNow.concat(res.fileID);
        //app.globalData.fileID = res.fileID
        that.setData({
          filelist: imageIDNow,//定义文件data
        })
        //resolve()
          wx.showToast({//上传成功图标
            title"成功"// 提示的内容
            icon"success"// 图标,默认success
            image""// 自定义图标的本地路径,image 的优先级高于 icon
            duration2000// 提示的延迟时间,默认1500
            maskfalse// 是否显示透明蒙层,防止触摸穿透
            successfunction () {
            },
            failfunction () {
                console.log("上传失败");
            },
            completefunction () {
                console.log("");
            }
        })
        //that.getTempFileURL()
      },
      fail(err){
        console.log(err)
        reject()
      },
      complete:function(){
        resolve()
      }
    })
  })
  promiseArr .push(p)
  }
  //获取下载链接
  Promise.all(promiseArr).then((res)=>{
    var that = this;
    for(let j=0 ,lenl=this.data.filelist.length; j<lenl; j++){
      const fileList_1 = that.data.filelist[j];
      //const downloudPathNow = that.data.downloudPath;
      wx.cloud.getTempFileURL({
        fileList: [fileList_1],
        successres => {
          console.log('成功获取地址',j,res.fileList[0].tempFileURL)
          that.setData({
            downloudPath:res.fileList[0].tempFileURL
          })
        },
        fail(err){
          console.log('失败',err)
        }
      })
    }
  })
},
回答关注问题邀请回答
收藏

2 个回答

  • Yza
    Yza
    2020-10-13

    之前做js-api 做图片上传的时候,发现上传接口是线程阻塞的,就是你上传第一个图片之后,得要在success里面 再上传下一张,直接 for循环来上传不行的,上传第一张就会把剩下的阻塞掉,所以永远只会上传第一张,你看看是不是这个问题

    2020-10-13
    有用 1
    回复 1
    • admin
      admin
      发表于小程序端
      2020-10-13
      可以循环
      2020-10-13
      回复
  • admin
    admin
    2020-10-13
                    success: res => {
                      let imgSrc = res.fileID;
                      pics.push(imgSrc);
                      that.setData({
                        pics,
                      });
                    },
    //萌新表示看不懂吖,我上传图片用的push拼接数组
    
    2020-10-13
    有用 1
    回复
登录 后发表内容
问题标签