【发布时间】:2021-09-30 10:07:51
【问题描述】:
我有一张支票,需要合并两张支票:
- 第一个检查是观察用户是否登录
- 第二个检查是一个可以返回布尔值或 Observable 的函数
有没有一种更优雅的方式将一个值包装在一个可观察的值中,如果它已经不是可观察的吗? 或者当第二个是 Observable 时,有没有办法将第一个检查与第二个检查结合起来? 还是以更有效的方式重构所有这些?
当然,这段代码是模拟我在真实应用中得到的示例(参见代码中的 cmets)。
const getRandomBool: () => boolean = () => Math.random() >= 0.5;
const getRandomCheck: () => boolean | Observable<boolean> = () => {
return getRandomBool() ? getAsyncCheck() : getSyncCheck();
};
const myFunction = (): Observable<boolean> | boolean => {
// First check telling if user is logged, which the UserService returns as Observable<boolean>
return of(getRandomBool())
.pipe(
mergeMap((isLogged) => {
// This is the check which can be either boolean or Observable<boolean>
const myCheck = getRandomCheck();
return isLogged
? iif(() => typeof myCheck === 'boolean', of(myCheck), myCheck)
: of(!1)
})
)
};
``
【问题讨论】:
标签: javascript rxjs refactoring