Javascript 如何访问回调侦听器外部的数组元素

Javascript 如何访问回调侦听器外部的数组元素,javascript,angular,typescript,openlayers,Javascript,Angular,Typescript,Openlayers,在下面发布的代码中,我试图从回调侦听器外部访问e.coordinatethis.map.on('pointermove'…),如下所示。 单击按钮即可调用方法routeToField()。在这个方法中,我试图访问this.mousePointerLonLat的值。回调侦听器中的log语句this.map.on(…)将显示并包含 具有两个元素的数组类型中的值。 问题是,尽管有这一点,当在方法routeToField()i receive()中访问时,mousepointerlonat被初始化 ER

在下面发布的代码中,我试图从回调侦听器外部访问e.coordinate
this.map.on('pointermove'…)
,如下所示。 单击按钮即可调用方法
routeToField()
。在这个方法中,我试图访问
this.mousePointerLonLat
的值。回调侦听器中的log语句
this.map.on(…)
将显示并包含 具有两个元素的数组类型中的值。 问题是,尽管有
这一点,当在方法
routeToField()
i receive()中访问时,mousepointerlonat
被初始化

ERROR TypeError: Cannot read property '0' of undefined
at SiteMapComponent.push.zIrq.SiteMapComponent.routeToFiel
请让我知道如何从methos
routeToField

代码

this.map.on('pointermove', (e)=>{
            this.mousePointerLonLat = toLonLat(e.coordinate);
        });

this.mousePointerLonLat = this.map.on.bind(this.mousePointerLonLat)
    console.log("this.mousePointerLonLat: ", this.mousePointerLonLat);
    console.log("this.mousePointerLonLat[0]: ", this.mousePointerLonLat[0]);
    console.log("this.mousePointerLonLat[1]: ", this.mousePointerLonLat[1]);
    var startLongitude = SynopsWebAppComponent.USER_COORDINATES.longitude;
    var startLatitude = SynopsWebAppComponent.USER_COORDINATES.latitude;
    var endLongitude = this.mousePointerLonLat[0];
    var endLatitude = this.mousePointerLonLat[1];
    this.openRouteServiceAPIService.getRouteAsVectorLayerBetweenStartEndLocations(startLongitude,startLatitude,endLongitude,endLatitude);

从我的评论中扩展

this.map.on('pointermove',{…})
中的回调是异步的。因此,如果在执行回调之前按下按钮,变量
this.mousePointerLonLat
仍将是
未定义的
。有关异步操作的更多信息,请参阅

一个快速的解决方案是禁用按钮,直到变量被初始化。你可以使用双爆炸算子

控制器(*.ts)

this.map.on('pointermove',(e)=>{
this.mousePointerLonLat=toLonLat(e.coordinate);
});
routeToField(){
log(“this.mousepointerlonat:”,this.mousepointerlonat);
log(“this.mousepointerlonat[0]:”,this.mousepointerlonat[0]);
log(“this.mousepointerlonat[1]:”,this.mousepointerlonat[1]);
var startongitence=SynopsWebAppComponent.USER_COORDINATES.longitude;
var startatitude=SynopsWebAppComponent.USER_COORDINATES.latitude;
var endLongitude=this.mousePointerLonLat[0];
var endLatitude=this.mousePointerLonLat[1];
这是StartEndLocation之间的.OpenRouteServiceApisService.GetRouteAsVectorLayer(
惊人的,
惊人的耐心,
经度,
端纬度
);
}
模板(*.html)


路线

使用箭头函数:
this.map.on('pointermove',(e)=>{…})。见帖子:@MichaelD我想你必须重新阅读这个问题,因为你的问题不清楚。1.您确定在单击按钮(或触发
routeToField()
之前,将触发对('pointermove',…)
上的
this.map.on的回调吗?2.你看过附件了吗?您认为在普通JS回调函数中,
this.mousePointerLonLat
可以访问哪个变量?它仅在回调范围内访问。类成员变量未在普通JS回调函数中初始化。为此,您需要使用
bind(this)
或arrow函数。@MichaelD您能告诉我如何使用bind(this)吗?@Letsamrit阅读了由Michael D链接的帖子。您正试图访问“this”,但这两个“this”-e并不相同。