我正在尝试使用setTimeout
在函数plotReglaFalsa
内执行一些语句,这些语句实际上是作为getSendingJSON("/plot",args,plotReglaFalsa)
的回调执行的
这是由setTimeout
执行句子的代码段:
for (series in respuesta) {
if (series != "x" && series != "y" && series != "raiz") {
setTimeout(function(respuesta,series){plot.highlight(c,[respuesta[series].a,0])},1500)
setTimeout(function(respuesta,series){plot.highlight(c,[respuesta[series].b,0])},1800)
c++
}
}
这里的问题是,一旦回调发生,respuesta等系列实际上就存在了。
当我尝试运行时,我得到以下控制台输出:
TypeError: series is undefined ...Timeout(function(respuesta,series){plot.highlight(c,[respuesta[series].a,0])},15... 16 biseccion.js (line 50) TypeError: series is undefined ...Timeout(function(respuesta,series){plot.highlight(c,[respuesta[series].b,0])},18...
这是我的全部代码:
function plotReglaFalsa(respuesta) {
var result = []
result.push({
label: "fx",
color: "red",
data: _.zip(respuesta['x'], respuesta['y'])
})
for (series in respuesta) {
if (series != "x" && series != "y" && series != "raiz") {
result.push({
color: "blue",
data: [[]]
})
}
}
var plot = $.plot( $("#placeholder"),
result,
{ selection:{mode: "xy"},
zoom: { interactive: true },
pan: { interactive: true },
grid: { markings: [{ xaxis: { from: 0.0, to: 0.0 }, color: 'black', lineWidth: 2 }, { yaxis: { from: 0.0, to: 0.0 }, color: 'black', lineWidth: 2 }] }
})
plot.getOptions().selection.mode = null
var c = 1
for (series in respuesta) {
if (series != "x" && series != "y" && series != "raiz") {
setTimeout(function(respuesta,series){plot.highlight(c,[respuesta[series].a,0])},1500)
setTimeout(function(respuesta,series){plot.highlight(c,[respuesta[series].b,0])},1800)
c++
}
}
}
getSendingJSON("/plot",args,plotReglaFalsa)
function resaltarPuntos(plot,respuesta,series,c,x){
plot.highlight(c,[respuesta[series].x,0])
}
function desResaltarPuntos(plot){
plot.unhighlight()
}
getSendingJSON
实际上是AJAX。我怎样才能完成这个?
答案 0 :(得分:1)
根据elclanrs'评价:
每次代码遍历for
循环时,它都会修改series
的值。因此,当您调用setTimeout()
时,series
的值已更新为respuesta
中的最后一个值。
您需要使用结束,以便setTimeout()
使用series
的值,因为在此次迭代期间是。
for (series in respuesta) {
if (series != "x" && series != "y" && series != "raiz") {
(function(x){
setTimeout(function(){plot.highlight(c,[respuesta[x].a,0])},1500);
setTimeout(function(){plot.highlight(c,[respuesta[x].b,0])},1800);
c++;
}(series))
}
}