angular - Observable - 开始有条件地发出

标签 angular typescript rxjs rxjs5

有没有办法开始从可观察对象有条件地发出值?就我而言,.asObservable() 函数的订阅者应该仅在 CurrentUser 初始化后获取第一个值。

export class CurrentUser {

    private currentUser$: Observable<CurrentUser>;
    private currentUserBehaviorSubject: BehaviorSubject<CurrentUser>;

    public name: string = "";

    constructor() {
        this.currentUserBehaviorSubject = new BehaviorSubject(this);
        this.currentUser$ = this.currentUserBehaviorSubject.asObservable();
    }

    public asObservable(): Observable<CurrentUser> {
        // 
        if(user.name.length > 0){
            return this.currentUser$;
        }
        else {
            // ?????
        }
    }

    public initialize(string name){
        this.name = name;
        this.currentUserBehaviorSubject.next(this);
    }
}

export class SampleComponent {
    constructor(
        currentUser: CurrentUser
    ) {
        currentUser.asObservable().subscribe(
            (u: CurrentUser) => {
                // i only want an INITIALIZED user here
            },
            error => {},
            () => { }
        );
    }
}

最佳答案

看起来您可以在 asObservable() 方法中始终返回一个 Observable,并使用 skipUntil() 运算符抑制发射,直到 currentUserBehaviorSubject > 发出(我猜这就是你知道 CurrentUser 已初始化的方式):

public asObservable(): Observable<CurrentUser> {
    return this.currentUser$
        .skipUntil(this.currentUserBehaviorSubject);
}

关于angular - Observable - 开始有条件地发出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44152835/

相关文章:

javascript - Typescript:无法在构造函数中使用 : 符号编译文件

Angular 错误 : "Can' t bind to 'ngModel' since it isn't a known property of 'input' "

angular - 如何在新标签页中打开Angular组件?

string - 如何根据对象属性字符串过滤 “ngFor” 循环内的项目

Angular - 使用 PrimeNg 表进行 Jasmine 测试 - 无法验证单元测试中的行数

html - Angular 2 中的模板驱动表单

Angular APP_INITIALIZER

angular - 如何在http调用 Angular 2的catch block 中读取响应主体

javascript - 将一系列有序操作组合成一个 Observable

javascript - RxJS 和 React 多次点击元素形成单个数据数组