回调函数的Angular 2范围

时间:2016-10-06 04:03:44

标签: javascript asynchronous angular scope callback

我是使用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;函数来访问父变量。然后我需要修复异步问题,所以我在“完成”中调用了该函数。回调。

0 个答案:

没有答案