gpt4 book ai didi

javascript - 从 Javascript 中的回调函数返回

转载 作者:行者123 更新时间:2023-12-02 19:33:00 24 4
gpt4 key购买 nike

我是 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”,而是收集整个路线(由许多腿组成)的所有结果,然后立即进行处理。

  1. 我首先想到创建一个全局变量(“myPOIs”)并在每条腿上附加“myResults”,解析整个路线后,然后处理这个 myPOIs,但我不能(或者我不知道)知道如何)将此 myResults 附加到全局变量 myPOIs。

  2. 我想到的另一个选择是从回调函数中获取返回值(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com