我打電話從我的index.html文件的功能。該函數是在我已經在html中提到的JavaScript文件中定義的。但是返回值總是未定義的。當我調試我可以看到返回字符串中的值。d3.js返回的函數值總是不確定
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的值總是undefined.However我可以看到在parsedCSVapp值。 CSV文件看起來是這樣的:
APPLICATION_ID,應用程序名稱,狀態,名稱,業務部 200039,處理,RED,馬克開始,金融&風險 200070,NGTX,RED,馬克開始,金融&風險 200097 ,WORLD-CHECK,紅,格雷厄姆費舍爾,金融&風險 200009,BOARDLINK,紅,珍妮弗·西蒙,金融&風險 200088,THOMSON ONE,RED,喬納森·溫伯格,金融&風險 200037,數據流,RED,伊恩·布羅克赫斯特,金融&風險 200044,EIKON,RED,奧利維爾·馬丁,金融&風險 200011,協作,RED,弗蘭克Tarsillo,金融&風險
'd3.text'是異步回調。您指定爲參數的函數在調用返回時執行,而其後的代碼立即執行,即當'returnstring'尚未定義時。 –
好的...所以我可以用d3.csv替換d3.text。它會解決這個問題嗎?在這種情況下如何解決這個問題 –
你不能 - 所有這些都是異步的。你需要在回調函數中運行所有你想運行的代碼和返回值。 –