1:多图上传
业务需求,本地选择图片,调用wx.chooseImage后,得到包含localIds数组后,进行调用wx.uploadImage上传图片。
1)第一次尝试 由于上传图片每次只能传一张,故先是使用promise.all,同时进行上传。
localImgs2webImgs(localImgs){
// 因为多张图片且数量不定,这里遍历生成一个promiseList
let promiseList = localImgs.map((item) => {
return new Promise(resolve => {
wx.uploadImage({
localId: item,
isShowProgressTips: 1, // 默认为1,显示进度提示
success: (rs) => {
resolve(rs.serverId);
},
fail: (fail) =>{
alert('上传图片失败'+JSON.stringify(fail))
}
});
});
});
// 使用Primise.all来执行promiseList
const result = Promise.all(promiseList).then((res) => {
// 返回的res是个数据,对应promiseList中请求的结果,顺序与promiseList相同
// 在这里也就是在线图片的url数组了
alert(JSON.stringify(res)+'得到promiseall的返回')
return res;
}).catch((error) => {
alert(JSON.stringify(error))
console.log(error);
});
return result;
},
此种方法逻辑没错,但微信内部规定,只能等上一张图片上传完毕后,才能上传下一张。 (每次都是只执行一次promise,结束,并且也没有报错,找了很久,最后找到微信官方文档,才理解,只能一次一次上传,不能异步同时上传。。。。。。。。)
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#68
2)第二次尝试
for (var i = 0; i < res.localIds.length; i++) {
wx.uploadImage({
localId: res.localIds[i], // 需要上传的图片的本地ID,由chooseImage接口获得
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (res) {
alert(JSON.stringify(res)+'上传图片成功'+i)
console.log("success");
},
fail: function (res) {
console.log("error");
}
});
}//for循环结束
安卓系统可以正确循环,ios系统,只循环一次。。。。故网上找答案,需要设置一个参数。