我正在建立一个Angular 6后卫。由adapter = FoodAdapter(getActivity(), foodsList)
运算符计算布尔值之后,我希望getActivity() --> activity
运算符中可用的user原始值可以用来计算重定向。
map
我对RxJS非常陌生。有没有一种方法可以在tap
运算符中访问原始用户值,而不创建可观察到的重复用户?
(我想我可以在return this.auth.user$.pipe(
take(1),
// Existing Users cannot register
map(user => user ? false : true),
tap(canAccess => {
if (!canAccess) {
// Calculate route based on user value
}
})
);
之前在技术上tap
,但是在转换值之前重定向似乎很奇怪。)
答案 0 :(得分:2)
现在就执行您的操作会将user
转换为boolean
。因此,在下一个tap
中,您最终将获得一个boolean
。
为什么不直接在user
中使用tap
并摆脱掉map
?
如果定义了user
,则if(!user)
仍将解析为false
。
如果user
是undefined
或null
,则if(!user)
将解析为true
。
是的,正如您所说,由于您需要返回一个Observable<boolean>
,因此必须将它map
返回到boolean
因此您可以使用此:
return this.auth.user$.pipe(
take(1),
tap(user => {
if (!user) {
// Calculate route based on user value
}
}),
map(user => user ? false : true)
);
答案 1 :(得分:1)
您可以依次使用map
,tap
和map
。最后一个map
允许您以Observable<boolean>
结尾,我想您最后需要这个。
map(user => [user, !user])
将原始值映射到两个值的数组:用户及其访问标志(布尔值)tap([user, canAccess]) => { ... }
接受两个值,并根据标志对用户进行所需的计算map(([user, canAccess]) => canAccess)
接受两个值,最后返回所需的值(布尔标志)通过这种方式,您不必重复canAccess
条件。
return this.auth.user$.pipe(
take(1),
map(user => [user, !user]), // !user should be equivalent to user ? false : true
tap(([user, canAccess]) => {
if (!canAccess) {
// Calculate route based on user value
}
}),
map(([user, canAccess]) => canAccess)
);