如何从数组异步订阅可观察对象 - angular
how to subscribe an observable asynchronously from an array - angular
我有一个包含 ID 的数组,我想以有序的方式为数组中的每个 ID 订阅一个 observable(请求 id 1 然后 2 ...)。
我试过 foreach 循环,但响应是无序的。
并尝试创建一个 for 循环并增加订阅者的索引,但浏览器崩溃了(因为在索引更改之前已经发送了大量请求)
我的代码:
const uniqueGroups=[1,2,3,4,5,6];
uniqueGroups.forEach(groupId => {
this.magB1BaseService.getAttributeGroup(groupId)
.subscribe(data => {
this.AttributeGroups.push(data);
this.AttributeGroupsCollapses[data.ID] = false;
});
});
一种实现方法如下:
const uniqueGroups = of(1, 2, 3, 4, 5, 6);
uniqueGroups.pipe(concatMap(groupId => (
this.magB1BaseService.getAttributeGroup(groupId))
.subscribe(data => {
this.AttributeGroups.push(data);
this.AttributeGroupsCollapses[data.ID] = false;
})));
使用concat运算符逐一订阅。
const uniqueGroups = [1,2,3,4,5,6];
let obs: Array<Observable<any>> = [];
uniqueGroups.forEach( groupId => {
obs.push(this.magB1BaseService.getAttributeGroup(groupId));
});
concat(...obs).subscribe( data => {
this.AttributeGroups.push(data);
this.AttributeGroupsCollapses[data.ID] = false;
});
我有一个包含 ID 的数组,我想以有序的方式为数组中的每个 ID 订阅一个 observable(请求 id 1 然后 2 ...)。 我试过 foreach 循环,但响应是无序的。 并尝试创建一个 for 循环并增加订阅者的索引,但浏览器崩溃了(因为在索引更改之前已经发送了大量请求)
我的代码:
const uniqueGroups=[1,2,3,4,5,6];
uniqueGroups.forEach(groupId => {
this.magB1BaseService.getAttributeGroup(groupId)
.subscribe(data => {
this.AttributeGroups.push(data);
this.AttributeGroupsCollapses[data.ID] = false;
});
});
一种实现方法如下:
const uniqueGroups = of(1, 2, 3, 4, 5, 6);
uniqueGroups.pipe(concatMap(groupId => (
this.magB1BaseService.getAttributeGroup(groupId))
.subscribe(data => {
this.AttributeGroups.push(data);
this.AttributeGroupsCollapses[data.ID] = false;
})));
使用concat运算符逐一订阅。
const uniqueGroups = [1,2,3,4,5,6];
let obs: Array<Observable<any>> = [];
uniqueGroups.forEach( groupId => {
obs.push(this.magB1BaseService.getAttributeGroup(groupId));
});
concat(...obs).subscribe( data => {
this.AttributeGroups.push(data);
this.AttributeGroupsCollapses[data.ID] = false;
});