天天看點

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