尝试订阅在 Angular 中返回 Observable 的方法

Posted

技术标签:

【中文标题】尝试订阅在 Angular 中返回 Observable 的方法【英文标题】:Trying to Subscribe to a method that returns an Observable in Angular 【发布时间】:2022-01-07 08:15:52 【问题描述】:

我有一个返回 Observable 的方法:

clockOut(): Observable<boolean> 
    let isClockedOut = new Subject<boolean>();
    isClockedOut.next(false);

    // Some code to clock out and return x

    if (x === true) 
        isClockedOut.next(true);
    

    return isClockedOut.asObservable();

我正在调用/订阅 clockOut() 方法,如下所示:

ngOnInit() 
    this.clockOut().subscribe((didClockOut: boolean) => 
        if (didClockOut === true) 
            // Do stuff
        
    );

clockOut() 方法被调用,clockOut() 中的代码正常执行,但 .subscribe 之后的代码块没有被调用。几乎就像 clockOut() 没有返回 Observable?

我是 Angular 的新手,我使用 Observables/Subjects 的次数不多。任何帮助表示赞赏。谢谢!

【问题讨论】:

【参考方案1】:

subject 不会将旧事件返回到新订阅,您正在触发 next 在返回 observable 之前,因此这些事件尚未订阅。

另外,这里不需要Subject,因为一切都是同步的。

如果您想触发最后一个事件,您可以使用BehaviorSubject 而不是subject

【讨论】:

啊!我使用了 BehaviorSubject,它似乎有效。谢谢。

以上是关于尝试订阅在 Angular 中返回 Observable 的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在订阅Angular 4中返回值

订阅可观察对象返回未定义

尝试在我当前的 Angular 应用程序中使用异步管道而不是订阅

Angular 2 从 RxJs 订阅返回数据

Angular 5:无法使用异步管道更新模板

Angular - 组件中订阅功能的单元测试