【发布时间】:2016-01-09 15:10:48
【问题描述】:
我想在地理编码器回调函数中引用项目对象。 如果我使用下面的代码,Item 总是指最后一次 $each 迭代的状态。我认为这是因为回调是在 $each 循环完成后运行的。因此,我需要将项目对象传递给地理编码器。我该怎么做?
$.each(results.data, function(index) {
var item = results.data[index];
geocoder.geocode( { 'address': address}, function(results, status) {
item.lat = results[0].geometry.location.lat();
item.lng = results[0].geometry.location.lng();
});
});
【问题讨论】:
-
您的操作方式应该可以正常工作。是什么让你认为它总是指向最后一项?你永远不会在你共享的代码中测试它的价值。您需要提供一个真实的测试用例:sscce.org
-
疯狂猜测:当您创建
results.data时,您将多个对 same 对象的引用副本放入数组中。 -
变量
results在这里永远不会改变,你总是选择第一个元素,所以我猜结果应该总是第一个元素? -
除非您的
geocode为相同的results返回不同的results,或者您以某种方式在每次迭代中修改address。我假设它在更高的范围内,因为它没有在函数的任何地方声明。 -
@MinusFour 结果确实会发生变化,因为它始终是地理编码器回调函数提供的不同对象。 (即地理编码运行多次并每次返回不同的结果对象。)这可能令人困惑,因为回调结果与每个迭代器使用的结果不同
标签: javascript callback