我知道这里有很多类似的问题,但我见过的都没有为我解答。如果我错过了一个,这是重复的,抱歉。
我正在尝试使用d3修改我的图形,并希望使用setTimeout以一种漂亮的方式来分隔操作。
我有
for (var key in alist){
setTimeout(function () {
graph.removeLink(alist[key].source.name, alist[key].target.name);
}(key), key*500+200);
}
立即调用removeLink函数,而不是等待设置的间隔。
我是javascript的新手,很抱歉,如果这是非常明显的事情,我无法在任何地方找到答案。
答案 0 :(得分:1)
您可以动态地将变量绑定到匿名函数,或者创建一个函数来包装超时。
匿名函数绑定:
for (var key in alist){
setTimeout(function (alistitem) {
graph.removeLink(alistitem.source.name, alistitem.target.name);
}.bind(this, alist[key]), key*500+200);
}
单独的功能:
function timedRemoveLink(item, time){
setTimeout(function() {
graph.removeLink(item.source.name, item.target.name);
}, time);
};
for (var key in alist){
timedRemoveLink(alist[key], key*500+200);
}
答案 1 :(得分:0)
当您尝试传入密钥时,您调用了匿名函数。而是使用闭包。确保制作密钥的本地副本!
for (var key in alist){
var keyCopy = key;
setTimeout(function () {
graph.removeLink(alist[keyCopy].source.name, alist[keyCopy].target.name);
}, key*500+200);
}