javascript中for循环中的异步函数

javascript中for循环中的异步函数,javascript,Javascript,我有一个二维数组名:final_draft_arr,我循环遍历这个数组的每个元素并调用一个函数名:getFileContentAsBase64。该函数是异步的,在为每个元素正确执行该函数之前,for已完成。如何解决这种异步行为。我希望函数在循环进入下一次迭代之前执行。代码如下所示 getFileContentAsBase64:async function(path,callback){ await window.resolveLocalFileSystemURL(path

我有一个二维数组名:final_draft_arr,我循环遍历这个数组的每个元素并调用一个函数名:getFileContentAsBase64。该函数是异步的,在为每个元素正确执行该函数之前,for已完成。如何解决这种异步行为。我希望函数在循环进入下一次迭代之前执行。代码如下所示

    getFileContentAsBase64:async function(path,callback){
        await window.resolveLocalFileSystemURL(path, gotFile);                  
        function gotFile(fileEntry) {
          fileEntry.file(function(file) {
               var reader = new FileReader();
               reader.onloadend = function(e) {
                 var content = this.result;
                 callback(content);
                };
                  reader.readAsDataURL(file);
         });
       }
     },

    base64ToBlob:function(base64, mime) { 
        mime = mime || '';
        var sliceSize = 1024;
        var byteChars = window.atob(base64);
        var byteArrays = [];

        for (var offset = 0, len = byteChars.length; offset < len; offset += sliceSize) {
            var slice = byteChars.slice(offset, offset + sliceSize);
            var byteNumbers = new Array(slice.length);
            for (var i = 0; i < slice.length; i++) {
                byteNumbers[i] = slice.charCodeAt(i);
            }
            var byteArray = new Uint8Array(byteNumbers);
            byteArrays.push(byteArray);
        }
        return new Blob(byteArrays, {type: mime});
    }, 

  //this is the loop
   var final_draft_arr = JSON.parse(retrievedData);
   $.each(final_draft_arr, function(key, value){
      var i_dat = new FormData();                                                                                                               
      var data_id_no = final_draft_arr[key][0];                                                                                                         
      var sub_arr_len = final_draft_arr[key].length;
      for(j=1; j < sub_arr_len; j++){                                                
         getFileContentAsBase64(final_draft_arr[key][j],function(base64Image){
            var base64ImageContent = base64Image.replace(/^data:image\/jpeg;base64,/, ""); 
            var blob_new = base64ToBlob(base64ImageContent, 'image/png');                                                                     
            i_dat.append('Bilder[]', blob_new);

        });                                                 
     }

  });
getFileContentAsBase64:异步函数(路径,回调){
wait window.resolveLocalFileSystemURL(路径,gotFile);
函数gotFile(fileEntry){
fileEntry.file(函数(文件){
var reader=new FileReader();
reader.onloadend=函数(e){
var内容=此结果;
回调(内容);
};
reader.readAsDataURL(文件);
});
}
},
base64ToBlob:函数(base64,mime){
mime=mime | |'';
var-sliceSize=1024;
var-byteChars=window.atob(base64);
var ByteArray=[];
对于(变量偏移=0,len=byteChars.length;偏移
将异步函数用作回调函数,并等待异步函数调用

$.each(final_draft_arr, async function(key, value){
  var i_dat = new FormData();                                                                                                               
  var data_id_no = final_draft_arr[key][0];                                                                                                         
  var sub_arr_len = final_draft_arr[key].length;
  for(j=1; j < sub_arr_len; j++){                                                
     await getFileContentAsBase64(final_draft_arr[key][j],function(base64Image){
        var base64ImageContent = base64Image.replace(/^data:image\/jpeg;base64,/, ""); 
        var blob_new = base64ToBlob(base64ImageContent, 'image/png');                                                                     
        i_dat.append('Bilder[]', blob_new);

    });                                                 
 }
});
$。每个(最终草案,异步函数(键,值){
var i_dat=新表单数据();
var数据\u id\u no=最终草案\u arr[关键点][0];
var sub_arr_len=最终草案[key]。长度;
对于(j=1;j
您需要等待getFileContentAsbase64函数,循环位于异步函数中。还可以将每个$交换为for循环。不确定你是否能在每个美元内进行等待