重複の可能性:
関数を setTimeout にループで渡す: 常に最後の値?
次のコードがあります。
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);
}
drive point は、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 のアイデアは、特定のポイントの座標を更新することですが、問題は、最後のポイントのみを更新することです。それにもかかわらず、 for (var i in points) ループの代わりにこれを個別に書き込む場合、ポイント変数にオブジェクトがいくつあるかにかかわらず
setInterval(function(){
drivePoint(points[0], 0)
}, 1000);
setInterval(function(){
drivePoint(points[1], 1)
}, 1000);
すべてが正常に動作します
どこに問題があるのか理解できない