我有一个创建许多请求的服务功能:
getData(): Array<Observable<AxiosResponse<Data>>> {
const data = [];
for (let i = 1; i <= end; i++) {
data.push(
this.http.get<Data>(
getUrl(i),
),
);
}
return data;
}
我具有控制器功能:
@Get()
get() {
return this.appService.getData().forEach(x => {
x.subscribe(y => {
// need to accumulate the data from each request and return that as a single json
});
});
}
您将如何在控制器方法中累积每个请求的所有数据 并将其作为单个json返回?有什么想法吗?
如果我这样做:
@Get()
get() {
const data = [];
return this.appService.getData().forEach(x => {
x.subscribe(y => {
data.push(...y.data);
});
return data;
});
}
无法使用,因为return data
将在实际的.subscribe(...)
之前执行
y.data
是一个对象数组,例如:
[
{key:"xyz", value:123 },
{key:"abc", value:666 }
]
答案 0 :(得分:2)
您可以使用rxjs运算符更好地处理它。
import { Observable, range } from 'rxjs';
import { concatMap, toArray } from 'rxjs/operators';
const source: Observable<Data[]> = range(1, end)
.pipe(
concatMap((i: number) => this.http.get<Data>(getUrl(i))),
toArray()
);
然后您可以订阅此来源:
source.subscribe((data: Data[]) => {
// Do some stuff with data
});