出现的问题是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,//文件地址
success: res => {
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
duration: 2000, // 提示的延迟时间,默认1500
mask: false, // 是否显示透明蒙层,防止触摸穿透
success: function () {
},
fail: function () {
console.log("上传失败");
},
complete: function () {
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],
success: res => {
console.log('成功获取地址',j,res.fileList[0].tempFileURL)
that.setData({
downloudPath:res.fileList[0].tempFileURL
})
},
fail(err){
console.log('失败',err)
}
})
}
})
},
之前做js-api 做图片上传的时候,发现上传接口是线程阻塞的,就是你上传第一个图片之后,得要在success里面 再上传下一张,直接 for循环来上传不行的,上传第一张就会把剩下的阻塞掉,所以永远只会上传第一张,你看看是不是这个问题
success: res => { let imgSrc = res.fileID; pics.push(imgSrc); that.setData({ pics, }); }, //萌新表示看不懂吖,我上传图片用的push拼接数组