【发布时间】:2019-10-31 04:32:39
【问题描述】:
我有一个返回一定数量 id 的 API 调用。 这些 id 中的每一个都用于进行新的 api 调用。这些 API 调用的结果需要合并到一个对象中。
起初我在第一个 api 调用的 .pipe(map) 运算符中使用了一个循环。在这个循环中,我进行了第二次 api 调用,并且在每个调用中的 .pipe(map) 运算符中,我将在我的角度组件中编辑一个变量。
这不是很漂亮,我实际上想知道这是否是线程安全的。我知道 javascript 是单线程的,但是让多个异步进程处理同一个全局变量似乎不太安全。
之后,我通过 apiCall1 循环返回的 Id 将第二个 api 调用返回的 observable 存储在一个数组中,并使用 forkJoin 相应地订阅和处理每个结果(参见示例)。
但这不是很漂亮,我想知道是否有一个操作符可以在我的管道中使用?
所以代替(伪代码):
.pipe(
map(ids=> {
let observables = []
for (const id of ids) {
observables.push(this.service.getSomeStuff(id));
}
forkJoin(...observables).subscribe(dataArray) => {
for (data of dataArray) {
//Do something
}
});
}),
takeWhile(() => this.componentActive),
catchError(error => {
console.log(error);
return throwError(error);
})
)
.subscribe();
有没有这样的操作符:
.pipe(
map(ids=> {
let observables = []
for (const id of ids) {
observables.push(this.service.getSomeStuff(id));
}
return observables
}),
forkJoin(dataArray => {
for (data of dataArray) {
//Do something
}
});
takeWhile(() => this.componentActive),
catchError(error => {
console.log(error);
return throwError(error);
})
)
.subscribe();
【问题讨论】:
标签: angular rxjs rxjs-pipeable-operators