我似乎无法完成以下工作。我只是想定义一个检索JSON文件的函数,并允许我将它们存储在一个对象中而不需要定义全局变量。
基本上,为什么这样做:
///Global
var filesaved=[];
///function
function getQuandlData(subset,datatype,token){
var url = "http://www.quandl.com/api/v1/datasets/"+subset+"/AAPL"_"+datatype+".json?auth_token="+token;
console.log(url);
$.getJSON(url, function(data) {
filesaved=data; console.log("filesaved as "+subset+"/"+$('#ticker').val().toUpperCase()+"_"+datatype,filesaved)
});
///use
getQuandlData("RAYMOND","NET_INCOME_Q",Quandl_auth_token);filesaved.data[0][1]
然而这不是
///function
function gQD(subset,datatype,token){
var fs=[];
var url = "http://www.quandl.com/api/v1/datasets/"+subset+"/AAPL_"+datatype+".json?auth_token="+token;
console.log(url);
$.getJSON(url, function(data) {
fs=data;
}); return fs;
}
///use
gQD("RAYMOND","NET_INCOME_Q",Quandl_auth_token).data[0][1];
变量Quandl_auth_token可以免费从Quandl.com获得,我只想保持私密:o
***这本质上是我的代码,只是与我的实际代码不同的是我更换了" AAPL"使用HTML输入。
***我明白我的问题围绕着异步函数的问题,有没有办法解决这个问题?
***另外gQD的输出(" RAYMOND"," NET_INCOME_Q",Quandl_auth_token)示例是[],
答案 0 :(得分:1)
如果我理解正确,这是一个异步功能。当你调用gQD时,它会调用$ .getJSON,它会发送一个回调,在将来的某个时刻指定fs=data
。在此期间,您的函数返回,fs仍为[]
。
当回调被调用时,它仍然会分配fs
,但现在你不再拥有它了。
此外,您的第二个代码示例中存在一些不一致和拼写错误,例如: gQD
vs getQuandlData
。
您可能想要做的是从回调函数中调用某些内容,因为这是您拥有有效fs
的时间点。
我不知道为什么第一个案例应该起作用,除了你在时间上是幸运的。