Я вызываю функцию из моего файла index.html. Функция определена в файле javascript, о котором я упоминал в html. Однако возвращаемое значение всегда не определено. Когда я отлаживаю, я мог видеть значение в возвращаемой строке.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, Имя приложения статус, имя, Business Unit 200039, DEALING, RED, Марк Бегун, финансовый & риск 200070, NGTX, RED, Марк Бегун, финансовый & риск 200097 , МИР-CHECK, RED, Грэм Фишер, финансовый & Риск 200009, BOARDLINK, RED, Дженнифер Саймон, финансовый & Риск 200088, THOMSON ONE, RED, Джонатан Вайнберг, финансовый & Риск 200037, DATASTREAM, RED, Ян Броклехерст, Финансовый & Риск 200044, EIKON, RED, Оливье Мартин, Финансовый & Риск 200011, ВЗАИМОДЕЙСТВИЕ, RED, Франк Tarsillo, Финансовый & Риск
'd3.text' - это асинхронный обратный вызов. Функция, которую вы укажете в качестве аргумента, выполняется, когда вызов возвращается, а код после его выполнения немедленно, то есть когда 'returnstring' еще не определен. –
ok ... так что я могу заменить d3.text на d3.csv. Будет ли это решено? Как это можно разрешить в этом случае –
Вы не можете - все они асинхронны. Вам нужно запустить весь код, который вы хотите запустить, с возвращаемым значением в функции обратного вызова. –