如果我不使用对象与观测量正确的词汇原谅我的行话。
不管怎么说,我想要做的是订阅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两个订阅()。
我只希望第一签约完成后,被称为第二订阅。
您可以使用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();
});
})
}
基本上,你可以使用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