意外行为,范围阻止和同步/异步混淆

时间:2017-09-13 00:33:50

标签: angular typescript asynchronous scope

更新:我一直在玩一些代码并发现我最初写的不完全正确所以我相应地编辑了这个问题。现在它更简单,但我仍然无法弄清楚是什么原因引起了这种奇怪的行为。

我对TypeScript和Angular相对较新,并且经历了一些我不理解的非常奇怪的操作。我有一个组件的以下代码段:

...
private formSchema: FormlyFieldConfig = [];

constructor(private http: Http) {
  this.http.get('assets/form_sample.json').subscribe(res => {
    let formSchema = res.json().formSchema;
    for (let row of formSchema.fieldGroup) {
      console.log(row);
    }
    //this.formSchema = new Array(formSchema);
  });
}
...

它读入一些JSON数据,遍历其中的数组并将其元素输出到控制台。该程序按预期工作。但现在是有趣的部分。我们稍微修改一下代码:

...
private formSchema: FormlyFieldConfig = [];

constructor(private http: Http) {
  this.http.get('assets/form_sample.json').subscribe(res => {
    let formSchema = res.json().formSchema;
    for (let row of formSchema.fieldGroup) {
      console.log(row);
    }
    this.formSchema = new Array(formSchema);
  });
}
...

我所做的就是取消注释。我希望程序能够提供相同的结果,但奇怪的是行为异常:控制台上的输出发生了变化:以前它只包含JSON文件中的数据,但现在它还有很多其他内容:数据和FormlyFieldConfig接口中实现的变量和函数的名称。我只是不明白这是怎么发生的。

似乎我取消注释的行负责提供不同数据的 console.log(row)。这里发生了什么事?这条线如何作用于过去执行的另一条线?

0 个答案:

没有答案