通过回调函数从传单Geocoder获取结果(位置数据)



我正在进行一个有角度的项目,该项目使用传单框架来实现地理编码器。我目前的要求是使用地理编码器,从结果中检索lat,lng,并将它们发送到父组件,然后在父组件中触发事件。

但问题仍然是,我在异步函数中获得结果,而我无法从内部发出,也无法从外部获得数据来发出

这是我正在使用的地理编码:

let grocoder = L.Control.geocoder({
placeholder:"Search",
geocoder: this.mapGeocoder
})
.on('markgeocoder', this.getGeo);

现在,我计划使用我在this.getGeo中获得的值,并将其发送到父组件。仅供参考,sendData是类型为emitter的@output((变量。

getGeo(res){
var lat = res.geocode.center.lat
this.sendData.emit(lat);
}

我不太熟悉如何处理承诺等问题,所以有什么办法可以做到这一点吗。我知道这与解决承诺有关,但我不知道如何实现它

感谢您的帮助,谢谢!!

因此,如果我正确理解了您的问题,那么您正试图在异步函数中发出@Output值。我真的不知道什么是地理编码,但通过一点研究,我找到了一个例子,我将尽可能好地澄清这一点。

public getAddress(query: string) {
return new Promise((resolve, reject) => {
this.geocoder.geocode({ searchText: query }, result => {
if(result.Response.View.length > 0) {
if(result.Response.View[0].Result.length > 0) {
resolve(result.Response.View[0].Result);
} else {
reject({ message: "no results found" });
}
} else {
reject({ message: "no results found" });
}
}, error => {
reject(error);
});
});}

这个函数返回一个promise,就像名称所说的那样,这是一个承诺在完成某个任务后返回值的操作,API调用的例子是,它需要一些时间来调用端点并接收响应。你可以休眠你的程序并等待它,或者定义过程完成后应该发生什么,让程序继续运行。

resolve((只是实现了承诺,并让程序超越then块中定义的函数。

reject((的作用应该很清楚,它只是说出了问题,然后可以被then函数块中的catch块捕获。

所以现在你已经定义了一个承诺的动作,以及它本身是什么承诺,现在你想告诉程序当承诺完成时该怎么做,然后你就可以在你的程序中执行它了。

看到这个:

this.getAddress(this.yourQuery).then(result => {
this.locations = <Array<any>>result;
}, error => {
console.error(error);
});

然后调用该函数,让您继续编程,在promise被填满后,它将返回到then函数块,并执行您在本例中指定的任何操作this.locations被分配了结果的值。

然后可以在then函数块中发出Output值,因为它不再在异步线程上。(不能在异步函数或异步线程上绑定角度发射器值(

我希望代码本身的帮助来自:https://developer.here.com/blog/using-the-here-geocoder-api-for-javascript-in-an-angular-application

就像我说的,我不知道api和用例,但我希望这个解释能澄清如何定义承诺并等待它。

如果你有问题,可以问一下,我不是一个专业人士,我不能仅仅解释表面功能。

我也可以推荐这个视频:https://www.youtube.com/watch?v=vn3tm0quoqE&t=194秒。他为这些事情制作了很棒的短视频。

希望这有所帮助。

最新更新