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

js中如何让for循环中的Promise全部完成后执行某个操作?_第1张图片

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

你可能感兴趣的:(前端)