角订阅可观察到的URL请求后(Angular Subscribe to Observable aft

2019-10-29 06:56发布

如果我不使用对象与观测量正确的词汇原谅我的行话。

不管怎么说,我想要做的是订阅newImages时获得的图像列表。 目前在控制台我的反应是

[]

[3]

[7]

[9]

每个数字是阵列的长度。 这是对的。 9是正确的长度阵列和我得到我的图像列表。

但! 我只是想在控制台打印出来[9]。 我不知道为什么我订阅的4倍。

我怎么会耽误订阅直到foreach循环结束,所以我不订阅多次?

我试图显示我可能会遇到的问题在我的HTML组件图像时害怕。

export class ViewComponent implements OnInit {

  constructor(private data: Masterdata) {   }

  ngOnInit() {
    this.data.currentMessage.subscribe(message => this.message = message);
  }

  getBabies() {
    this.data.getBabiesById().subscribe(
      data => {
      this.BabiesRooms = data;

      data.forEach((element) => {
        this.data.getImagesByBabyId(String(element.idbabyroom)).subscribe();
      });
      });

    console.log("ASDF");
      this.data.newImages.subscribe(data => console.log(data));

  }
}

编辑:让我重组你的豆蔻。 有在该方法中getBabies两个订阅()。

我只希望第一签约完成后,被称为第二订阅。

Answer 1:

您可以使用forkjoin要做到这一点:

Observable.forkJoin(
  this._myService.makeRequest('Request One', 2000),
  this._myService.makeRequest('Request Two', 1000),
  this._myService.makeRequest('Request Three', 3000)
)
.subscribe(([res1, res2, res3]) => {
  this.propOne = res1;
  this.propTwo = res2;
  this.propThree = res3;
});

你也可以利用Rxjs flatMap的做同样的:

import { switchMap } from 'rxjs/operators';
getBabies() {
    return this.data.getBabiesById().do(response => {
        // do something with above response
        this.BabiesRooms = response;
    }).flatMap(response => {
        response.forEach((element) => {
            this.data.getImagesByBabyId(String(element.idbabyroom)).subscribe();
        });
    })


}


Answer 2:

基本上,你可以使用rxjs forkJoin。 而代替forEach使用地图列表存储在数组中。 下面是你应该尝试什么

  let someVar = data.map((element) => {
     return this.data.getImagesByBabyId(String(element.idbabyroom));
    });
  });

 const result = forkJoin(someVar)
       .subscribe(res => {
    // Here you will get the result in the form of array
    // such as
    // console.log(res[0], 'res[0]') is first res of subscription stored in array and so on...
    // console.log(res[1], 'res[1]')
    // console.log(res[res.length - 1]) // to get the last item
  })

有关详细信息forkJoin



文章来源: Angular Subscribe to Observable after URL request
标签: angular