what I want to do is just simply read multiple file information through for loop. However, Javascript does not wait for the FileReader.onload even if I used Promise.
How can we wait for the FileReader.onload ? Here is the code example.
const promises = [];
for (let i = 0; i < files.length; i++) {
promises.push(
new Promise((resolve, reject) => {
const fileReader = new FileReader();
const filename = files[i].object.name;
audioDict.filename[i] = filename;
fileReader.readAsArrayBuffer(files[i].object);
fileReader.onload = function (e: any) {
audioCtx
.decodeAudioData(e.target.result)
.then(function (decodedData: AudioBuffer) {
// source.buffer = decodedData;
audioDict.audio[i] = {};
for (let c = 0; c < decodedData.numberOfChannels; c++) {
audioDict.audio[i][c] = decodedData.getChannelData(c);
}
audioDict.sr[i] = decodedData.sampleRate;
});
};
resolve(audioDict);
})
);
}
Promise.all(promises).then(() => {
// Do something using audioDict here.
console.log("done!");
});