添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
...
save_tap:function(){
var that = this;
let files= [];
let parr=[];
if(that.data.files.length>0){
that.data.files.map((item)=>{
let base64 = wx.getFileSystemManager().readFileSync(item, "base64");
let p= new Promise((reslove, reject) => {
wx.getImageInfo({
src: item,
success:function(res){
res.base64=base64;
reslove(res);
}
})
});
parr.push(p);
});
}

Promise.all(parr).then(function(resolve){
console.log("resolve--",resolve);
resolve.map((item)=>{
let base64=item.base64
base64='data:image/'+item.type+';base64,'+base64;
files.push(base64);
})

console.log("files:",files);
ctm.addtip({tip:that.tip,files:files},(res)=>{
console.log(res);
});
},function(){

});

},

...

页面上上传多张图片,要获取每张图片的文件类型,必须使用

wx.getImageInfo({
src: item,
success:function(res){

}
})

这个方法返回的是一个promise,是异步的,

每张图片获取类型都是异步的,在for循环中,如何让这所有的promise都执行完了组装成base64字符串数组提交到后台,查找了一下promise的文档,找到了这一段

js中如何让for循环中的Promise全部完成后执行某个操作?_for循环

这正好解决了我的问题,将所有的promise收集起来放到一个数组中,然后用Promise.all方法,在then回调函数中value存着之前每次执行完的结果,再循环values就是我想要实现的。