如何成功等待FileReader.onload加载文件?
我要做的就是只需通过循环阅读多个文件信息即可。但是,即使我使用了Promise,JavaScript也不会等待FileReader.onload。
我们如何等待filereader.onload?这是代码示例。
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!");
});
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!");
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我想在Onload功能中移动您的分辨率函数调用将解决此问题。
I guess moving your resolve function call inside the onLoad function will solve this problem.