Javascript 获取未定义的回调

Javascript 获取未定义的回调,javascript,csv,asynchronous,xmlhttprequest,Javascript,Csv,Asynchronous,Xmlhttprequest,我有这样的代码,当我控制台记录fileContent时,它给出了正确的输出,但当我尝试将其作为返回时,它给出了错误 我想在其他函数中使用csv文件的内容。同时保持代码干净 ;(function(){ function readTextFile(file) { var rawFile = new XMLHttpRequest(); rawFile.open("GET", file, true); var fileContent; rawFile.onreadystatec

我有这样的代码,当我控制台记录fileContent时,它给出了正确的输出,但当我尝试将其作为返回时,它给出了错误

我想在其他函数中使用csv文件的内容。同时保持代码干净

    ;(function(){

    function readTextFile(file)
    {
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, true);
var fileContent;
rawFile.onreadystatechange = function ()
{
    if(rawFile.readyState === 4)
    {
        if(rawFile.status === 200 || rawFile.status == 0)
        {
            var allText = rawFile.responseText;
           fileContent =csvJSON(allText);
           return fileContent;
        }
    }
}
rawFile.send(null);
    }


    function csvJSON(csv){
    var lines=csv.split("\n");

    var result = [];

    var headers=lines[0].split(",");

    for(var i=1;i<lines.length;i++){

    var obj = {};
var currentline=lines[i].split(",");

for(var j=0;j<headers.length;j++){
  obj[headers[j]] = currentline[j];
}

result.push(obj);

    }

    return result; //JavaScript object
    //return JSON.stringify(result); //JSON
    }

    var mainContent = readTextFile("main.csv");


    })();
;(功能(){
函数readTextFile(文件)
{
var rawFile=new XMLHttpRequest();
打开(“GET”,file,true);
var文件内容;
rawFile.onreadystatechange=函数()
{
if(rawFile.readyState==4)
{
if(rawFile.status==200 | | rawFile.status==0)
{
var allText=rawFile.responseText;
fileContent=csvJSON(allText);
返回文件内容;
}
}
}
rawFile.send(空);
}
函数csvJSON(csv){
变量行=csv.split(“\n”);
var结果=[];
var headers=行[0]。拆分(“”,“”);

对于(var i=1;i您应该了解一些异步工作。当您将handler设置为
readystatechange
时,您只需从XMLHttpRequest订阅该事件,当该事件触发时,您的函数将被调用。因此该函数无法返回某些内容。除非您指定另一个名为
callback的函数
然后在处理程序中调用它

看看这个:

function readTextFile(file, callback) {
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, true);
    var fileContent;
    rawFile.onreadystatechange = function () {
        if(rawFile.readyState === 4) {
            if(rawFile.status === 200 || rawFile.status == 0) {
                var allText = rawFile.responseText;
               fileContent =csvJSON(allText);
               callback(fileContent);
            }
        }
    }
当您需要请求时:

readTextFile('main.csv', function(data) {
    console.log(data);
}
异步计算就是这样工作的