总结:本质上我需要
from Users where usergroupIds in [1,3,5]
.
鉴于
usergroupIds$
发出组ID数组
[1,3,5]
我想通过以下方式联合所有用户
userids
在里面
usergroupIds
并组合用户ID(distinct)
我想到的是:
usergroupIds$.subscribe(usergroupIds => {
const users$s = usergroupIds.map(gid => createUsersObservable(gid))
const users$ = combineLatest(...user$s).pipe(
distinct(user => user.id)
)
})
createUsersObservable = gid =>
collectionData(db.collection('users').where('groupId', '==', gid))
取消订阅&重新订阅
users$
每次换衣服都是错的?
可以表达吗
用户$
完全在RXJS中,而不是每次都在订阅中创建它?
更新:
在@fancheung的帮助下:
combinedUsers$ = userGroupIds$.pipe(
switchMap(userGroupIds => {
const users$s = userGroupIds.map(groupId =>
createUsersObservable(groupId))
return combineLatest(...users$s)
})
但是,由于usersobservable一次发出一组用户,combinedUsers$会导致类似
[[userA, userB], [userB, userC], [userA, userD]]
我不介意对订阅进行额外处理:
combinedUsers$.subscribe(combinedUsers => {
const userMap = {}
for (const users of combinedUsers)
users.forEach(user => (userMap[user.id] = user))
const uniqueUsers = Object.values(userMap)
})
然而,有没有一种方法可以用某种方式使
combinedUsers$
,然后执行
distinct
操作员?