等待要加载的文件(onload事件的JavaScript)(Waiting for a file t

2019-10-17 04:07发布

我想从文件中读取文本,并在函数返回。 因此,这里是我的代码的重要组成部分:

        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”变量。 但是,因为在我看来,至少,警报(VAL)总是显示默认的“x”,因为可能它没有等待的onload函数来执行。 我说得对不对呢? 我怎样才能到文本,然后访问? 有没有一种方法,以等待excecution?

Answer 1:

当然,警报不是在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
});


文章来源: Waiting for a file to load (onload JavaScript)