我在循环中有一个异步回调问题。我对Window的一个文件对象调用了一个异步函数,以获取有关它的更多信息(getImagePropertiesAsync()
),并将这些信息保存到数据库中,以加快进一步的访问速度。我需要该函数返回的值以及i
我调用时所具有的值getImagePropertiesAsync()
。
for (var i = 0; i < picsGiven.length; i++) {
picsGiven[i].properties.getImagePropertiesAsync().then(function(prop){
settings.values["geoLat" + i2] = props.latitude;
settings.values["geoLon" + i2] = props.longitude;
settings.values["geoDate" + i2] = props.dateTaken;
i2++;
})
}
由于异步执行,所以三个值对以错误的顺序保存。当我写这篇文章的时候,我已经担心这个问题了。下次尝试。
for (var i = 0; i < picsGiven.length; i++) {
picsGiven[i].properties.getImagePropertiesAsync().then((function(prop, i2){
settings.values["geoLat" + i2] = props.latitude;
settings.values["geoLon" + i2] = props.longitude;
settings.values["geoDate" + i2] = props.dateTaken;
})(undefined, i))
}
现在,我i
正确了,但props
未定义。(逻辑上)。
保存时如何i
正确获取props
?提前致谢!
(未经测试)是这样的:
function mk_handleImagePropertiesAsync(ival) {
return function(prop) {
settings.values["geoLat" + ival] = prop.latitude;
settings.values["geoLon" + ival] = prop.longitude;
settings.values["geoDate" + ival] = prop.dateTaken;
}
}
for (var i = 0; i < picsGiven.length; i++) {
picsGiven[i]
.properties
.getImagePropertiesAsync()
.then(mk_handleImagePropertiesAsync(i));
}
范围问题!for循环不会像C / C ++中那样引入新的块范围。循环中的内联函数将始终获得相同的i2值(其初始值!)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句