Angular 与初始值组合
我有两个流:Angular 与初始值组合,angular,rxjs,Angular,Rxjs,我有两个流:user$从http.get()返回,以及userSelectAction$发出所选用户 我想将它们与CombineTest(…)组合成一个selectedUser$,我想让selectedUser$的第一个值是我从http.get()获得的第一个用户 users$=this.http.get('URL').pipe(shareReplay()); userSelectAction$=新主题(); selectedUser$=CombineTest( 此.userSelectActi
user$
从http.get()
返回,以及userSelectAction$
发出所选用户
我想将它们与CombineTest(…)
组合成一个selectedUser$
,我想让selectedUser$
的第一个值是我从http.get()获得的第一个用户
users$=this.http.get('URL').pipe(shareReplay());
userSelectAction$=新主题();
selectedUser$=CombineTest(
此.userSelectAction$,
这是我们的用户$
)
.烟斗(
地图(([selecteUser,users])=>{
返回users.find(user=>user.id==selectedUser.id);
}),
shareReplay()
);
这是我迄今为止的做法。不,我必须努力使用从用户$
收到的第一个用户初始化selectedUser$
(它并不总是同一个用户)。一旦收到用户列表,您可以将结果映射到映射到选定用户的用户选择操作$
。而该流从数组中的第一个用户开始。例如:
users$=this.http.get('URL').pipe(shareReplay());
userSelectAction$=新主题();
selectedUser$=users$.pipe(
flatMap(用户=>{
返回此.userSelectAction$.pipe(
//将用户选择操作映射到用户[]
map(selecteUser=>users.find(user=>user.id==selectedUser.id)),
//从第一个用户开始
startWith(用户[0])
)
})
希望它有帮助您可以使用BehaviorSubject
为userSelectAction$
指定初始值。这样combineLatest
将在users$
发出后立即启动。然后检查空值并指定所需的用户
userSelectAction$ = new BehaviorSubject<User>(null);
selectedUser$ = combineLatest(
this.userSelectAction$,
this.users$
)
.pipe(
map(([selecteUser, users]) => selectedUser
? users.find(user=> user.id === selectedUser.id)
: getFirstUser(users);
),
shareReplay()
);
getFirstUser(users: User[]): User {
return users && users.length > 0 ? users[0] : null;
}
userSelectAction$=newbehaviorsubject(空);
selectedUser$=CombineTest(
此.userSelectAction$,
这是我们的用户$
)
.烟斗(
地图(([selecteUser,users])=>selecteUser
?users.find(user=>user.id===selectedUser.id)
:getFirstUser(用户);
),
shareReplay()
);
getFirstUser(用户:用户[]):用户{
返回users&&users.length>0?用户[0]:null;
}
因此,您并不真的希望合并这两个观察值。您希望等到用户$
发射,然后仅从此发射继续。userSelectAction$
?这也是一种很好的方法。谢谢