gpt4 book ai didi

javascript - 在 settimeout 期间仅更新最后一个值

转载 作者:行者123 更新时间:2023-11-28 02:43:15 24 4
gpt4 key购买 nike

Possible Duplicate:
Passing functions to setTimeout in a loop: always the last value?

我有以下代码:

var points = [{
id1 : 1,
id2 : 9,
lat : 44,
lng : 24
},{
id1 : 2,
id2 : 7,
lat : 13,
lng : 29
}];

当我尝试为数组点中的每个对象创建超时时,它仅更新最后一个元素

for (var i in points){
setInterval(function(){
drivePoint(points[i], i)
}, 1000);
}

其中驱动点是发出ajax请求的函数:

function drivePoint(point, i){
$.ajax({
type: "POST",
url: 'url',
data: points[i]
}).done(function(o){
var data = $.parseJSON(o);
points[i].lat = data['lat'];
points[i].lng = data['lng'];
});
}

drivePoint的想法是更新给定点的坐标,但问题是它只更新最后一个,但是有多少个对象在points变量中而不是for (var i in points)循环来写这个分别

setInterval(function(){
drivePoint(points[0], 0)
}, 1000);

setInterval(function(){
drivePoint(points[1], 1)
}, 1000);

一切正常

不明白问题出在哪里

最佳答案

这里的问题是,当您的函数执行时,i 将被设置为循环中的最后一个值,因此在执行 drivePoint() 时将使用该值。但你真的需要每个点都有单独的间隔吗?您可以让间隔循环遍历所有值吗?

setInterval(function() {
for (var i in points) {
drivePoint(points[i], i);
}
}, 1000);

关于javascript - 在 settimeout 期间仅更新最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12334893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com