有没有一种方法可以在调用诺基亚反向地理编码api时将响应和查询关联起来

Is there a way to associate the reponse and query while invoking Nokia reverse geocoding api?

本文关键字:api 编码 响应 起来 关联 查询 一种 方法 诺基亚 调用 有没有      更新时间:2023-09-26

我使用reverseGeo管理器的方法nokia.places.search.manager(HERE API)来检索有关坐标的信息。在我的情况下,当显示一点的信息时,它工作得很好。但当我有多个点时,我所有的点都会得到最后一个点的信息。

事实上,我并没有像提供的示例中那样使用infobubble在onComplete方法中显示地址信息。

我已经将所有标记(nokia.maps.map.Marker的扩展,嵌入了InfoBuble)存储在键/值全局变量中。因此,在onComplete方法中,我想更新正确的标记。

下面是我调用搜索服务的方式:

searchManager.reverseGeoCode({
latitude: lat,
longitude: lng,
onComplete: function(data, status, requestId){
    processResults(data, status, requestId, myID);
    }
});

其中myID是允许检索正确标记以使用地址信息进行更新的值。

问候

您可以通过使用立即调用的函数表达式对任何JavaScript回调执行此操作。

你的代码应该是这样的:

searchManager.reverseGeoCode({
    latitude: lat,
    longitude: lng,
    onComplete: (function(localID) {
        return function(data, status, requestId) {
            processResults(data, status, requestId, localID);
        };
    })(myID)
});

要理解这个例子,您需要很好地理解闭包和上面提到的立即调用的函数表达式语法。

我今天也有一个类似的例子,它相当模糊。按照Andrzej Duś的建议,回调函数的作用域也有问题。回调中的参数是在执行回调时评估的,这就是为什么它总是使用传递给最后一个的参数执行。您需要回调函数来使用封闭循环中特定迭代的参数(即myID)执行。

这样做的一种方法是创建一个新功能,比如:

var f = new Function('myCallbackFunction(' + myID + ')');
exampleExternalFunction(f);

或者,用你的例子,

var f= new Function('data', 'status', 'requestId',
    'processResults(data, status, requestId,' + myID + ')'
... other code ...
onComplete: f
...

我可能不太适合你的情况。查找JavaScript"new Function()"的详细信息可以更好地理解这一点。