等待加载文件(onload JavaScript)

等待加载文件(onload JavaScript),javascript,file,onload,wait,filereader,Javascript,File,Onload,Wait,Filereader,我想从文件中读取文本,并在函数中返回它。下面是我代码的重要部分: function getFileRequest(id, contentType, callback) { var val = "x"; if (window.File && window.FileReader && window.FileList && window.Blob) { var elem

我想从文件中读取文本,并在函数中返回它。下面是我代码的重要部分:

        function getFileRequest(id, contentType, callback) {
        var val = "x";      

        if (window.File && window.FileReader && window.FileList && window.Blob) {
            var element = document.getElementById(id);

            var file = element.files[0]; 
            if(file != null) {      
                if(file.type.match("text/xml")){
                    var r;
                    r = new FileReader();

                    r.onload = function (e) {
                        val = e.target.result;                    

                    }                   
                    r.readAsText(file);
                }
                else
                    alert("Wrong file format");
            }

        } else {
            alert('The File APIs are not fully supported by your browser.');
        }

        alert(val);
        if(val == null)
                return "";
            else
                return getRequestBody(id,contentType,val);  

    }
我想将文本传递给一个名为“val”的变量。但是,至少在我看来,alert(val)总是显示默认的“x”,因为它可能不等待onload函数被执行。我说得对吗?
那我怎么才能读到那篇文章呢?是否有方法等待执行?

当然,该警报不在onload函数中,因此会立即调用它

你可以这样做:

        var val = "x";      
        //... code to load a file variable
        var r;
        r = new FileReader();

        r.onload = function (e) {
            val = e.target.result;  
            r.readAsText(file);
            alert(val);
        };  
您不能等待并停止代码的执行,因此一般的想法是使用回调延迟代码的执行

假设您展示的代码实际上分为两部分,一部分进行文件操作,另一部分使用它,它可能是这样的:

function fetchVal(callback) {
        var val = "x";      
        //... code to load a file variable
        var r;
        r = new FileReader();
        r.onload = function (e) {
            val = e.target.result;  
            r.readAsText(file);
            callback(val);
        };  
}

fetchVal(function(val){
   alert(val);
   // use val
});

当然可以,但是我想让这个文本在onload函数之外你的onload函数可以调用另一个函数,但是你不能停止执行。那么你知道我如何才能真正得到一个文件文本并将它返回到函数中的一个地方,在这个地方,alert(val)现在在我的版本中?我不确定我是否完全理解回调,但是我用一段更大的代码编辑了我的帖子,所以你可以看到我想如何使用这个val变量。老实说,我不知道如何使用回调和您给出的示例。即使我可以在你的注释部分使用它,我仍然需要在前面的函数中获得这个值。要编写javascript,你需要理解异步调用和回调的逻辑。没有其他方法可以处理异步操作,如文件读取。不能将异步操作视为同步操作。