从第一个请求this.userService.getAll()开始,我有500个用户,对于每个用户,我都请求他们拥有2个其他属性(列表)。不幸的是,它一次发送了所有1000个请求,并且它没有先处理第一个请求,而是处理第二个请求,依此类推。我希望第一个用户及其属性P1的结果立即显示在页面上。我可以看到所有请求在发送后都已处理,因为日志来自“ console.log('请求一个结果');”。在请求日志之后打印。我从角度使用rxjs库和httpClient。该应用程序的角度为7。
this.userService.getAll().subscribe((data: any) => {
this.users = data.users;
if (data && data.users){
data.users.forEach(user => {
this.userService.getP1(user.id).subscribe(
(data: any) => {
console.log('request one result');
if(data) user.p1 = data.p1; });
this.userService.getP2(user.id).subscribe(
(data: any) => {
console.log('request two result');
if(data) user.p2 = data.p2; });
}
})
答案 0 :(得分:1)
您可以使用concat()顺序订阅可观察对象。 Concat将从连续的每个可观察值中发出值。可观察的对象一次又一次地完成。
this.userService.getAll().subscribe((data: any) => {
this.users = data.users;
const observables = data.users.map(user => {
return combineLatest(
this.userService.getP1(user.id),
this.userService.getP2(user.id)
);
});
concat(...observables).subscribe(([dataP1, dataP2]) => {
console.log({dataP1,dataP2});
if(dataP1) user.p1 = dataP1.p1;
if(dataP2) user.p2 = dataP2.p2;
});
});