HTTP订阅后ngOnInit中的脚本无法激活

时间:2020-05-24 18:12:38

标签: angular http observable

我正在学习Angular,但似乎找不到解决此问题的方法。我正在订阅HTTP服务。但是,订阅后,之后的所有脚本都不会激活。即使是简单的console.log数据日志也不会激活。

如果我这样做,它将起作用:

    this._colorsService.returnColorsHttp()
      .subscribe(
        (data: any) => {
          this.colors = data;
          this.totalColors = data.length;
          this.colorRows = Array.from(Array(Math.ceil(this.totalColors / this.colorItemsPerRow)).keys())
          console.log(this.totalColors);
          console.log(this.colorRows);
        }
      );
  }

但是,如果执行此操作,它将失败:

    this._colorsService.returnColorsHttp()
      .subscribe(
        (data: any) => {
          this.colors = data;
          this.totalColors = data.length;
        }
      );
    this.colorRows = Array.from(Array(Math.ceil(this.totalColors / this.colorItemsPerRow)).keys())
    console.log(this.totalColors);
    console.log(this.colorRows);
  }

提前谢谢!

2 个答案:

答案 0 :(得分:1)

成功接收到服务的响应后,将调用订阅中的代码,直到此为止,它不会被阻止,并继续进行订阅下面的代码。收到响应后,此后才执行订阅块中的代码。

这就是异步任务的工作方式。

答案 1 :(得分:0)

以下内容应放在您的订阅中:

this.colorRows = Array.from(Array(Math.ceil(this.totalColors / 
this.colorItemsPerRow)).keys())
console.log(this.totalColors);
console.log(this.colorRows);

赞:

this._colorsService.returnColorsHttp()
  .subscribe((data: any) => {
      this.colors = data;
      this.totalColors = data.length;

      this.colorRows = Array.from(Array(Math.ceil(this.totalColors / 
      this.colorItemsPerRow)).keys())
      console.log(this.totalColors);
      console.log(this.colorRows);
    }
  );

}