将新值发送给Observable

时间:2019-03-29 04:37:46

标签: javascript angular rxjs

我有以下代码:

this.isUsingGoogleTwoFactor$ = this.user$.pipe(map((user: User) => 
user.isUsingGoogleTwoFactor));

现在,我要向isUsingGoogleTwoFactor$发送新值。我知道我无法使用observables来做到这一点,但我应该使用subjects。但是我不知道该如何使用管道。

谢谢!

2 个答案:

答案 0 :(得分:3)

选中BehaviourSubject。这种Observable可以使您推送新值并跟踪其发出的最后一个值。

如何使用它的一个示例是在我链接的那个站点中。简而言之,这就是您的用法:

const observable = new BehaviorSubject("initial value");

如果此时订阅者出现并执行:

observable.subscribe({
    next: (value) => console.log("The value is: ", value)
});

然后输出将是:

The value is: initial value

此后,每次您调用next时,所有订阅者都会收到通知:

observable.next("a new value");

将在订户中打印此内容:

The value is: a new value

答案 1 :(得分:1)

如果我对状态的理解正确,那么您希望此可观察值既可以在用户$的更改时触发,也可以在您手动触发时触发。然后,您可以采用这种方法。

import { merge, Subject } from 'rxjs';

...

const manuallyTriggered$ = new Subject();
const triggeredFromUser$ = this.user$.pipe(
    map((user: User) => user.isUsingGoogleTwoFactor)
);

this.isUsingGoogleTwoFactor$ = merge(manuallyTriggered$, triggeredFromUser$);

当您要手动触发它时:

manuallyTriggered$.next(true);