天天看点

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

...
  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的文档,找到了这一段