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