我有一个名为' plotData'的数据数组。它包含任意数量的行'数据,只是4元素数组。数组' plotData'附加到代码中使用$ .post()脚本几行。 ' ...'是加载post请求中显示的一些变量的地方。
console.log("plotData (before update): ", plotData);
console.log("plotData length: ", plotData.length);
...
...
...
$.post(
"/csvgen",
{node_num: nodes.toString(), start_time: startTime.toString(), end_time: endTime.toString()},
function(data){
var nodeData = $.csv.toArrays(data);
nodeData.forEach(function(element){
plotData.push(element);
});
},
"text"
);
我在控制台中记录数组和array.length,认为这两个方法调用应该按顺序执行。当我查看控制台输出时,数组的控制台日志显示有28个条目,但plotData.length的控制台日志是14.随着数组的追加,事实证明plotData的实际长度是总是比plotData.length控制台输出大14。
' plotData'数组在此代码之外读取,但未修改。
这是什么原因?
编辑以添加日志
Can't plot empty data set
TypeError: Cannot read property 'length' of undefined(…)
plotData (before update): []
plotData length: 0
plotData (before update): [Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4]]
plotData length: 14
plotData (before update): [Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4]]
plotData length: 28
plotData (before update): [Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4]]
plotData length: 50
第一个错误是b / c,当我实例化我的情节时,数据集是空的。
答案 0 :(得分:1)
您的代码在调用post()
之前记录。尝试将日志记录语句添加到回调函数的末尾 - 它们应显示“正确”值(在追加新行之后)。
答案 1 :(得分:1)
问题在于我正在使用的调试器(Chrome),而不在代码本身。代码的行为符合预期。
" console.log()"函数会记录单个值,但是在记录数组时,不会记录任何值。调试器只是给自己做一个说明"嘿,那个数组已经记录在那里"。因此,当用户从日志中打开数组时,日志会根据日志打开时的内容动态生成数组。
因此,要将此信息与症状相关联,请正确记录数组的实际长度,但会记录指向该数组的指针。当用户到达断点时,显示的post请求已经返回,将数据添加到' plotData'阵列。这使得它在停止时显示出plotData.length和实际长度不同。
这个答案应归功于alexdmejias(见问题评论)。谢谢!
答案 2 :(得分:0)
您需要记录回调内的长度。无论何时收到响应,您在post函数内写入的回调都会启动,但是您在响应之前尝试记录长度(因此尚未调用回调)并且未正确设置数组。
也许请阅读documentation。