JSON数组从$http.GET返回未定义,即使它不应该'
JSON array from $http.GET returning undefined even though it shouldn't be
下面是我的代码:
function getLineGraphData(unit, startTs, endTs, startState, endState){
points = [];
console.log('/file/tsDataPoints/'+unit+"?startDate="+startTs+"&endDate="+endTs+"&startState="+startState+"&endState="+endState);
$http.get('/file/tsDataPoints/'+unit+"?startDate="+startTs+"&endDate="+endTs+"&startState="+startState+"&endState="+endState).success(function(data){
for (var i = 0; i < data.length; i++) {
points.push({x:getBasicTimeFromEpoch(data[i].ts), y:data[i].data});
}
return points;
});
}
function fileStateLineGraph(unit, startTs, endTs){
getLineGraphData(unit, startTs, endTs, 1, 2);
console.log(getLineGraphData(unit, startTs, endTs, 1, 2));
var dp1= getLineGraphData(unit, startTs, endTs, 1, 2);
var dp2= getLineGraphData(unit, startTs, endTs, 2,3);
var dp3 = getLineGraphData(unit, startTs, endTs, 3,4);
console.log(dp1);
console.log(dp2);
console.log(dp3);
var chart = new CanvasJS.Chart("chartContainer", {
title: {
text: "Click on legend items to hide/unhide dataseries"
},
legend: {
cursor: "pointer",
itemclick: function (e) {
if (typeof (e.dataSeries.visible) === "undefined" || e.dataSeries.visible) {
e.dataSeries.visible = false;
} else {
e.dataSeries.visible = true;
}
chart.render();
}
},
data: [{
//axisYType:"secondary",
showInLegend: true,
type: "line",
dataPoints: dp1
}, {
showInLegend: true,
type: "line",
dataPoints: dp2
}, {
showInLegend: true,
type: "line",
dataPoints: dp3
}]
});
chart.render();
}
fileStateLineGraph("day",1404000000, 1406000000)
当我运行控制台时。日志只显示"未定义"。我想知道是否因为函数在JSON调用完成之前运行,但我从未遇到过这样的错误。
首先,您的getLineGraphData
函数没有返回值。其次,它是异步运行的,因此您必须等待success
处理程序才能访问points
数据。
因此,首先,您必须添加一个return
语句:return $http.get(...
。这将返回一个Promise。
其次,要访问points
,必须使用promise.then(function(points) { ... })
。在then
函数中,您可以访问数据。
现在,如果你依赖于多组点,你必须等待它们全部完成。您可以这样使用$q.all(...)
:
$q.all({
dp1: getLineGraphData(unit, startTs, endTs, 1,2),
dp2: getLineGraphData(unit, startTs, endTs, 2,3),
dp3: getLineGraphData(unit, startTs, endTs, 3,4)
}).then(function(dataPoints) {
var dp1 = dataPoints.dp1, dp2 = dataPoints.dp2, dp3 = dataPoints.dp3;
... Create your chart ...
});
in getLineGraphData -您从成功回调$http.get返回点。这并不意味着它是从getLineGraphData返回的。美元http。Get返回一个promise,这就是你应该从函数返回的内容。然后在promise上放一个成功回调,并填充dp1等等。
function getLineGraphData(unit, startTs, endTs, startState, endState){
points = [];
console.log('/file/tsDataPoints/'+unit+"?startDate="+startTs+"&endDate="+endTs+"&startState="+startState+"&endState="+endState);
return $http.get('/file/tsDataPoints/'+unit+"?startDate="+startTs+"&endDate="+endTs+"&startState="+startState+"&endState="+endState);
}
var dp1 = [];
getLineGraphData(unit, startTs, endTs, 1, 2).success(function(data){
for (var i = 0; i < data.length; i++) {
dp1.push({x:getBasicTimeFromEpoch(data[i].ts), y:data[i].data});
}
console.log(dp1);
});
相关文章:
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- 当null应该在javascript中使用而不是未定义时
- javascript函数不返回未定义的值
- 断言var集通过<输入ng模型>不是未定义的
- ember dev fixes错误:“;断言失败:findAll的响应必须是数组,而不是未定义的“”;
- Traceur运行时:超级表达式必须为null或函数,而不是未定义的
- Javascript函数变量应生成错误,而不是未定义的错误
- 为什么我会得到未捕获的类型错误:can'找不到未定义的属性
- 检查变量是否大于某物,但不是未定义的
- 找不到“未定义”中的模块
- 从新对象的属性更新对象的属性,但前提是新对象上的属性不是未定义的
- 咖啡脚本中的“if a 不是未定义的”和“if a”有什么区别
- Ember 断言失败:来自 findQuery 的响应必须是数组,而不是未定义
- 在函数之后找不到/未定义类名
- 错误: [ng:areq] 客户控制器不是未定义的函数
- IE8 中的 IE7 模式 - 本地存储不是未定义的
- 参数“[controllerName]”在转换为TypeScript时不是未定义的NaNunction
- 如果不是未定义和索引('foo')做某事
- Dojo lang.replace - 如何提供默认值,而不是“未定义”
- ReactJS映射函数找不到未定义的属性