收藏
回答

wx.uploadfile 使用for循环发生异步提交怎么解决?

var zhi = that.data.inputlist.length - 1;

for(var j=0; j<zhi; j++){

debugger

var pics = that.data.inputlist[j].img;

wx.uploadFile({

url: bbsUrl + '?op=-1&mid=' + wx.getStorageSync('mid'),

filePath: pics[j],

name: 'fileData',

dataType: 'json',

formData: null,

method: 'POST',

success: function (resp) {

console.log("1234567897899" + resp);

}

});

}


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

4 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2019-09-11

    递归上传

    imgPaths 待上传的所有图片路径数组

    currentIndx 当前要上传的图片数组下标,从0开始


    oneUpload: function(imgPaths, currentIndx){

        var t = this

        console.log('正在上传第' + (currentIndx + 1) + '张图片')

        wx.uploadFile({

            //...

            filePath: imgPaths[currentIndx],

            success: function (res) {

                console.log('第' + (currentIndx + 1) + '张图片上传成功')

                // 判断是否还有需要上传的图片

                if (currentIndx + 1 < imgPaths.length) {

                    // 继续上传下一张图片

                    t.oneUpload(imgPaths, currentIndx + 1)

                } else {

                    console.log('所有图片上传成功')

                }

            },

            fail: function (res) {

                console.log('第' + (currentIndx + 1) + '张图片上传失败')

            }

        })

    }


    2019-09-11
    有用 4
    回复
  • 马乾
    马乾
    2019-09-11

    promise了解一下

    2019-09-11
    有用 1
    回复 7
    • 被淹死的鱼
      被淹死的鱼
      2019-09-11
      我的不是多图上传,而是循环多图上传,因为使用了for只执行最后一个前面的发生异步直接跳过没有走完代码直接结束
      2019-09-11
      回复
    • 马乾
      马乾
      2019-09-11回复被淹死的鱼

      upLoadImage: (imageList) => {

      wx.showLoading({

      title: '加载中',

      })

      let num = 0;

      let fileUpload = new Array();

      return new Promise(function(resolve, reject) {

      for (let i = 0; i < imageList.length; i++) {

      wx.uploadFile({

      url: basepath + "*    **/***",

      filePath: imageList[i],

      name: 'uploadify',

      success: function(res) {

      let data = res.data;

      data = JSON.parse(res.data);

      fileUpload.push(data.path);

      if (num == imageList.length - 1) {

      resolve(fileUpload);

      }

      num += 1;

      }

      })

      }

      });

      }

      我是这样写的你看看

      2019-09-11
      1
      回复
    • 暮雪
      暮雪
      2020-03-31
      兄弟 你这个写的没问题 但是最后接受到的返回值是一个有内容的空数组 但是内容拿不出来。。。
      2020-03-31
      回复
    • augenye
      augenye
      2020-04-06回复暮雪
      兄弟我也是,返回的数组空的,可是点开来是有数据的,取不来,你怎么解决的
      2020-04-06
      回复
    • 黎曦
      黎曦
      2020-07-04
      promise 的.then也是异步的
      2020-07-04
      回复
    查看更多(2)
  • vking
    vking
    2019-09-11

    如果非得要按顺序传 promise await async了解下,编辑器增强编译打开,就可以支持这些关键字;

    一般批量上传是允许异步的,这样更快,上传时做个标识(j),上传完成根据标识放入数组

    2019-09-11
    有用 1
    回复 3
    • ,
      2019-09-11
      你说 这个编辑器增强编译在哪打开? 这个线上也直接能用吗
      2019-09-11
      回复
    • vking
      vking
      2019-09-12回复


      2019-09-12
      回复
    • ,
      2019-09-12
      哦 好的 编辑器没有更新 谢谢了
      2019-09-12
      回复
  • Mr.Zhao
    Mr.Zhao
    2019-09-11

    用递归

    2019-09-11
    有用
    回复 4
    • 被淹死的鱼
      被淹死的鱼
      2019-09-11
      好的谢谢我试试
      2019-09-11
      回复
    • 被淹死的鱼
      被淹死的鱼
      2019-09-11
      有没有递归的相关代码
      2019-09-11
      回复
    • Mr.Zhao
      Mr.Zhao
      2019-09-11回复被淹死的鱼
      https://www.cnblogs.com/xjwy/p/6956120.html
      2019-09-11
      回复
    • 被淹死的鱼
      被淹死的鱼
      2019-09-11回复Mr.Zhao
      我的不是多图上传,而是循环多图上传,因为使用了for只执行最后一个前面的发生异步直接跳过没有走完代码直接结束
      2019-09-11
      回复
登录 后发表内容
问题标签