function mapHasStops(callback) {
app.map.mapObject.getVisibleRegion(function (bounds) {
for (var i = 0; i < app.map.mapContent.length; i++) {
(function (i) {
app.map.mapContent[i].getPosition(function (position) {
if (bounds.contains(position)) {
callback(true);
return;
}
});
})(i);
}
});
}
function updateScreenContent() {
mapHasStops(function (bool) {
alert(bool);
});
}
尽管在成功匹配后立即返回,但alert
函数仅被调用一次时,updateScreenContents
被多次调用(取决于它找到的匹配项数)。有什么想法吗?
答案 0 :(得分:0)
修复代码将是:
function mapHasStops(callback) {
app.map.mapObject.getVisibleRegion(function (bounds) {
var found = false;
for (var i = 0; i < app.map.mapContent.length && !found; i++) {
(function (i) {
app.map.mapContent[i].getPosition(function (position) {
if (bounds.contains(position)) {
found = true;
callback(true);
return;
}
});
})(i);
}
});
}
function updateScreenContent() {
mapHasStops(function (bool) {
alert(bool);
});
}
但是可能有更好的方法来编写这个函数......
答案 1 :(得分:0)
return语句只退出自己的执行上下文,而不是任何外部上下文。在这种情况下,该值将由 getPosition 返回并使用:
// Enclosing context
(function (i) {
// Function expression is passed to *getPosition*
// whose return value is not assigned
app.map.mapContent[i].getPosition(function (position) {
if (bounds.contains(position)) {
callback(true);
return;
}
});
})(i);
因此函数表达式起始function (position)
被传递给 getPosition 方法,该方法可能会调用它。它的价值在那里返回并继续做任何事情。它不会再返回。
答案 2 :(得分:-1)
&#34;功能(位置)&#34;传递作为回调函数? 如果是,则for循环不会等待它返回,因此&#34;功能(位置)&#34;被多次打电话。