使用Javascript处理文件永远不会完成

使用Javascript处理文件永远不会完成,javascript,Javascript,我有一个JS函数,其目的是在用户选择一个文件后加载一个文件。函数如下所示: function setupFileListener() { document.getElementById('Attachment').addEventListener('change', (e) => { var file = document.getElementById('Attachment').files[0]; if (file) { p

我有一个JS函数,其目的是在用户选择一个文件后加载一个文件。函数如下所示:

function setupFileListener() {
    document.getElementById('Attachment').addEventListener('change', (e) => {
        var file = document.getElementById('Attachment').files[0];
        if (file) {
            processFile(file);
        }
    })

    const processFile = (file) => {
        alert("Processing file");

        const fr = new FileReader();

        fr.readAsDataURL(file);
        fr.onloadend = () => fileLoaded;
    }

    const fileLoaded = (e) => {
        alert("File loaded");

        const fr = e.target
        var result = fr.result;

        console.log(result)
    }
}
处理开始时,alert()函数会正确启动,但在加载文件时,我从未让alert()启动。因此,似乎从未调用fileLoaded。我在Chrome中运行这个程序,没有生成Javascript错误


有人能看到可能的错误吗?

您应该调用该函数,而不仅仅是在onLoadEnd事件中返回它

   const processFile = (file) => {
        alert("Processing file");

        const fr = new FileReader();

        fr.readAsDataURL(file);
        fr.onloadend = (e) => fileLoaded(e);
    }

可能是这行=>

fr.onloadend = () => fileLoaded; to
fr.onloadend = () => fileLoaded();
函数setupFileListener(){
document.getElementById('Attachment')。addEventListener('change',(e)=>{
var file=document.getElementById('Attachment')。文件[0];
如果(文件){
进程文件(文件);
}
})
const processFile=(文件)=>{
警报(“处理文件”);
const fr=new FileReader();
fr.readAsDataURL(文件);
fr.onloadend=(e)=>fileLoaded(e);
}
const fileLoaded=(e)=>{
警报(“文件加载”);
常数fr=e.target
var结果=fr.result;
console.log(结果)
}
}
setupFileListener()

如果在读取文件(
readAsDataURL()
)之前设置事件处理程序(
onloadend
),该怎么办?fileLoaded(e)而不是fileLoadedMaybe将()添加到fileLoaded。