如何将索引传递给 setTimeout
How to pass an index into setTimeout
我知道这里有很多类似的问题,但是 none 我已经看到了答案。如果我错过了一个,这是重复的,抱歉。
我正在尝试使用 d3 修改我的图形,并希望使用 setTimeout space 以一种美观的方式进行操作。
我有
for (var key in alist){
setTimeout(function () {
graph.removeLink(alist[key].source.name, alist[key].target.name);
}(key), key*500+200);
}
这会立即调用 removeLink 函数,而不是等待设置的时间间隔。
我是 javascript 的新手,很抱歉,如果这是非常明显的问题,我无法在任何地方找到答案。
您在尝试传递密钥时调用了匿名函数。改为使用闭包。请务必制作密钥的本地副本!
for (var key in alist){
var keyCopy = key;
setTimeout(function () {
graph.removeLink(alist[keyCopy].source.name, alist[keyCopy].target.name);
}, key*500+200);
}
您可以动态地将变量绑定到匿名函数,或者创建一个函数来包装超时。
匿名函数绑定:
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);
}
我知道这里有很多类似的问题,但是 none 我已经看到了答案。如果我错过了一个,这是重复的,抱歉。
我正在尝试使用 d3 修改我的图形,并希望使用 setTimeout space 以一种美观的方式进行操作。
我有
for (var key in alist){
setTimeout(function () {
graph.removeLink(alist[key].source.name, alist[key].target.name);
}(key), key*500+200);
}
这会立即调用 removeLink 函数,而不是等待设置的时间间隔。
我是 javascript 的新手,很抱歉,如果这是非常明显的问题,我无法在任何地方找到答案。
您在尝试传递密钥时调用了匿名函数。改为使用闭包。请务必制作密钥的本地副本!
for (var key in alist){
var keyCopy = key;
setTimeout(function () {
graph.removeLink(alist[keyCopy].source.name, alist[keyCopy].target.name);
}, key*500+200);
}
您可以动态地将变量绑定到匿名函数,或者创建一个函数来包装超时。
匿名函数绑定:
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);
}