在某些坑爹的小程序中,原型链并没有formData,只能使用他的uploadfile方式对图片进行上传,而且单次只能上传一张图片,要是我们想让这个上传的动作同步执行怎么办呢。
我们选中图片的时候会得到一个图片的列表比如
filePath:[
'https://assasass/123123.png',
'https://assasass/123124.png',
'https://assasass/123125.png'
]
三张图片。
上传的时候,你可能需要
for(let i in filePath){
uni.uploadFile({
//...
success:res=>{
//得到响应数据
},
fail:err=>{
//响应失败内容
}
})
}
但是这个时候,我们并不知道每次请求需要花费的时间,有可能在文件大小不一的情况下,第一次请求还没得到响应,第二次请求就已经响应成功了。
为了避免这个问题,我们可以:
const temp = [];
for(let i in filePath){
temp.push(
new Promise((resolve,reject)=>{
uni.uploadFile({
//...
success:res=>{
//得到响应数据
resolve(res)
},
fail:err=>{
//响应失败内容
reject(err)
}
})
})
)
}
将所有的请求先组装为一个promise装到列表中,再利用promise的all方式去执行他们。
Promise.all(temp).then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
这时候的res就是一个列表,一个根据你响应顺序执行的列表。