我是 Javascript 编码的新手,并且在很多地方查找过此信息,但没有找到一个可行的解决方案,因此我在这里发布这个问题。
在 for 循环中,我尝试使用 - 请求某个区域(路线的一段)中的 POI -
service.search(request, callback);
其中请求包含查询的 POI 的位置和类型等参数。我已经实现了如下回调函数 -
function callback(myResults, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
alert('myResults: ' + myResults.length);
// entire remaining code here, where I do some processing on the POIs.
}
}
此代码正在运行,在路线的每一段,我都可以看到 POI,并且使用警报显示 POI 的数量。
我的问题是,我不想在此处处理每条腿的“myResult”,而是收集整个路线(由许多腿组成)的所有结果,然后立即进行处理。
我首先想到创建一个全局变量(“myPOIs”)并在每条腿上附加“myResults”,解析整个路线后,然后处理这个 myPOIs,但我不能(或者我不知道)知道如何)将此 myResults 附加到全局变量 myPOIs。
我想到的另一个选择是从回调函数中获取返回值(myResults),然后收集(附加)所有结果。
1 和 2 之间的唯一区别是,在 1 中,它是一个全局变量,我会将 myResults 附加到 if 条件内,而在 2 中,如果 if 条件为 true,则将 myResults 返回到 service.search然后在那里收集结果。
我尝试使用 myPOIs.push(myResults) 和其他一些选项,但是当我检查 myPOIs.length 时它始终为空。我真的不知道如何从回调函数中获取myResults。
任何建议/通过/帮助对我来说都非常有用。
我只想使用 javascript,而不使用其他任何东西。
提前非常感谢, 斧头
最佳答案
假设您将搜索称为如下:
for (var i = 0; i < legs.length; i++) {
service.search(legs[i], callback);
}
然后您可以通过跟踪所有结果以及回电次数来做到这一点:
var callbacksOutstanding = legs.length;
var allPlaces = [];
var callback = function(legPlaces, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
allPlaces.push.apply(allPlaces, legPlaces);
}
if (--callbacksOustanding === 0) {
processPlaces(allPlaces);
}
};
for (var i = 0; i < legs.length; i++) {
service.search(legs[i], callback);
}
其中 processPlaces
是您编写的用于处理 PlaceResult
对象的完整数组的函数。
现在,如果这三个 var
语句都包含在一个函数中(应该如此),则它们不是全局变量,因为在 Javascript 中您可以而且应该定义其他函数内部的函数。如果这样做,内部函数将可以访问外部函数中的变量。所以对我来说这可能看起来像这样:
function findAndProcessPlaces(legs) {
var callbacksOutstanding = legs.length;
var allPlaces = [];
var callback = function(legPlaces, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
allPlaces.push.apply(allPlaces, legPlaces);
}
if (--callbacksOustanding === 0) {
processPlaces(allPlaces);
}
};
for (var i = 0; i < legs.length; i++) {
service.search(legs[i], callback);
}
}
注意:allPlaces.push.apply
行执行一个数组到另一个数组的就地串联。你也可以这样写:
allPlaces = allPlaces.concat(legPlaces)
此时。
关于javascript - 从 Javascript 中的回调函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285834/