d3.js函数的返回值总是未定义的

时间:2013-10-08 15:45:50

标签: d3.js

我从index.html文件调用一个函数。该函数在我在html中引用的javascript文件中定义。但是返回值始终未定义。当我调试时,我可以看到返回字符串中的值。

Follwing是index.html中的代码

<script type="text/javascript">
function readQueryStringparam(name) 
    {

        name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regexS = "[\\?&]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var results = regex.exec(window.location.href);
        if (results == null)
        return "";
        else
        return results[1];
    } 


function getDiDataUrlPrefix() 
{

             diDataUrlPrefix = diGlobal.instanceInfo.getDiDataUrlPrefix();
            //alert(diDataUrlPrefix);   
            sbu = readQueryStringparam('sbu');
            appid = readQueryStringparam('appid');


            if (sbu.length > 0) 
            {
                sbu = sbu.trim();
                CreateChart(diDataUrlPrefix,sbu,0,appid);
            }
            else if (appid.length > 0)
                {

                    sbu = GetSBUForApplication(appid);
                    CreateChart(diDataUrlPrefix,0,0,appid);
                }
}

 </script>

我获取了url中提供的参数的值以及diDataUrlPrefix。

以下是javascript文件中的代码:

function GetSBUForApplication(appid)
{
    setTimeout(function() { }, 10000);
    var string;
    var file = diDataUrlPrefix + "/oss/csvs/Consolidated_RAG.csv";

    d3.text(file, function(datasetText) 
        {

            parsedCSVapp = d3.csv.parseRows(datasetText);


            if (appid >0)
            {
                    parsedCSVapp = parsedCSVapp.filter(function(row)
                    {
                        //alert(parsedCSVapp);
                        return row[0] == appid



                    })//parsed fileter ends here

                returnstring = parsedCSVapp[0][4];



            }

        })



    return returnstring;

}

然而,sbu的值总是未定义的。但是我可以在parsedCSVapp中看到这些值。 csv文件如下所示:

Application_Id,应用程序名称,状态,名称,业务单位 200039,DEALING,RED,Marc Begun,Financial&amp; Risk 200070,NGTX,RED,Marc Begun,Financial&amp; Risk 200097,WORLD-CHECK,RED,Graham Fisher,Financial&amp; Risk 200009,BOARDLINK,RED,Jennifer Simon,Financial&amp; Risk 200088,THOMSON ONE,RED,Jonathan Weinberg,Financial&amp; Risk 200037,DATASTREAM,RED,Ian Brocklehurst,Financial&amp; Risk 200044,EIKON,RED,Olivier Martin,Financial&amp; Risk 200011,COLLABORATION,RED,Frank Tarsillo,Financial&amp; Risk

1 个答案:

答案 0 :(得分:1)

d3.text(和d3.csvd3.json等)进行异步调用。也就是说,当您运行代码时,将进行调用并继续执行,而无需等待调用返回。 这些函数的第二个参数是一个在调用返回时执行的函数 - 回调。

此功能不会在您运行d3.text的同时执行,但稍后会执行。您无法确定它将在何时运行。您希望根据其中一个调用调用的任何代码都需要作为回调函数的一部分运行,或者从那里调用。