我是使用Angular 2(以及一般的前端开发)的新手,并且我遇到了有关变量范围的问题。我不知道这是不是因为我与Angular 2(和区域)存在一些知识差距,或者我是否完全错过了其他内容。
sqlEngine;
constructor(private zone: NgZone) {
this.sqlEngine = new cartodb.SQL({user: 'user', format: 'geojson'});
}
cartoDBSQLEngine(SQLquery: string, SQLuser: string, returnFormat: string, propertyType: string){
var returnthis;
var test = 50;
this.sqlEngine.execute(SQLquery).done(function (geojson){
for (var i = 0; i < geojson.features.length; i++){
geojson.features[i].properties.type = propertyType;
}
console.log("Direct GeoJSON output below:");
console.log(geojson);
returnthis = geojson;
console.log(returnthis); //here returnthis is equal to geojson.
console.log("Test: "+test); //this returns 50.
test = 20;
});
console.log("Test2: "+test); //this remains 50.
return returnthis; //here returnthis is undefined.
}
我无法分辨这是一个范围问题还是一个异步问题 - 我是不是想让他们回归这个问题。等于可能尚未初始化的东西?如何访问“geojson”中的数据?从回调函数内部,回调函数之外?
在构造函数中我有&#39; NgZone&#39;,因为其他一些帖子提到了Angular 2区域,其中Asynchronous函数需要NgZone在Angular 2环境之外运行。我真的不明白 - 也不知道如何使用NgZone来访问变量。
更新: 工作代码:
cartoDBSQLEngine(SQLquery: string, SQLuser: string, returnFormat: string, propertyType: string){
this.sqlEngine.execute(SQLquery).done((geojson) => {
for (var i = 0; i < geojson.features.length; i++){
geojson.features[i].properties.type = propertyType;
}
this.addDatatoMap(geojson);
});
}
原来我有两个问题需要解决。我需要使用&#39; =&gt;&#39;来解决范围问题。允许完成&#39;函数来访问父变量。然后我需要修复异步问题,所以我在“完成”中调用了该函数。回调。