Me gustaría hacer que una función espere a que otra termine por completo. Tenemos esta función que procesa una lista de archivos y carga cada uno de ellos en la función loadFileIntoMemory.
Me gustaría que esta función esperara a que la función loadFileIntoMemory termine de manipular y trabajar en dicho archivo antes de pasar a la siguiente iteración del ciclo y llamarlo con el siguiente archivo.
function processFiles(files) { for (let i = 0; i < files.length; i++) { console.log("Loading File into memory"); loadFileIntoMemory(files[i]); } }Por lo tanto, cargaría el archivo número 1, esperaría a que todo esté hecho y listo, luego cargaría el archivo 2. No quiero que envíe archivos no deseados en la función loadFileIntoMemory sin que finalice el archivo anterior.
function loadFileIntoMemory(file) { //create a dictionary using the file name originalValues[file.name] = {}; // create a variable with the file name to pass to storeOriginalValues and replaceOccurence var filename = file.name; // Start reading the file var reader = new FileReader(); reader.onload = function (file) { var arrayBuffer = reader.result; // Here we have the file data as an ArrayBuffer. dicomParser requires as input a // Uint8Array so we create that here var byteArray = new Uint8Array(arrayBuffer); dataSet = dicomParser.parseDicom(byteArray); // Store the original values into the dict storeOriginalValues(filename); // iterate through each metadata field and replace the original value with the de-identified value. console.log("De-identifying values") for (const [key, value] of Object.entries(elementsToRemove)) { var element = dataSet.elements[value]; if (typeof element !== "undefined") { for (var i = 0; i < element.length; i++) { dataSet.byteArray[element.dataOffset + i] = 32; } } } // Check if the Patient ID is still Present after the de-indentification process is completed replaceOccurences(filename, originalValues[filename].PatientID); // replaceOccurences(filename, originalValues[filename].PatientName); // replaceOccurences(filename, originalValues[filename].etc); // download the de-identified DICOM P10 bytestream console.log('Downloading File'); var blob = new Blob([dataSet.byteArray], { type: "application/dicom" }); var url = window.URL.createObjectURL(blob); window.open(url); window.URL.revokeObjectURL(url); }; reader.readAsArrayBuffer(file); }Deberá convertir su loadFileIntoMemory en una Promesa.
function loadFileIntoMemory(file) { return new Promise((resolve,reject) => { ...... reader.onload = function (file) { ...... return resolve(); //when all is done, resolve the promise. } }) }Luego puede usar la función en un ciclo asíncrono/espera.
const processFiles = async (files) => { for (let i = 0; i < files.length; i++) { console.log("Loading File into memory"); await loadFileIntoMemory(files[i]); } }