首页 文章

Angular2 Observable - 如何从Observable的构造函数外部调用next

提问于
浏览
15

我正在构建一个暴露Observable的服务 . 在这个服务中,我接收外部函数调用,它应该触发Observable的下一个调用,以便各种消费者获得订阅事件 . 在Observer构造函数中,我可以调用next,一切都很好,但是如何在构造函数外部访问它,以便外部触发器可以触发下一个调用?

private myObservable$: Observable<any>;

在服务初始化期间我做

this.myObservable$ = new Observable(observer => {
    observer.next("initial message");
}

然后在同一服务的其他方法中,我希望能够执行类似的操作

this.myObservable$.observer.next("next message");

以上显然不起作用,但我怎样才能实现这个目标呢?

我假设我缺少一些基本的东西,因为必须有一种方法可以在Observable的初始构造函数之外发出更多消息

3 回答

  • 1

    您应该为此创建一个Subject

    this.myObservable$ = new Subject();
    

    然后你可以随时打电话:

    this.myObservable$.next(...);
    

    或使用订阅:

    this.myObservable$.subscribe(...)
    
  • 22

    两种方式:

    • 使myObservable $ public:
    public myObservable$: Observable;
    
    • 将observable封装在主题流中,并提供一个帮助来调用next:
    export class TestService {
      public myObservable$: Observable;
      private _myObservableSubject: Subject;
    
      constructor() {
        this._myObservableSubject = new Subject();
        this.myObservable$ = this._myObservableSubject.asObservable();
      }
    
      public NextMessage(message?: string): void {
        this._myObservableSubject.next(message);  
      }
    }
    
  • 1

    实际上 Subject 用于 publisher and subscriber ,在这里我认为你只需要发布你的值,所以只需使用Observable .

    通过使用observable,将Subscriber分配给类级变量,然后使用它,如下面的代码

    subscriber: Subscriber<boolean>;
    
    public observe(): Observable<boolean> {
    
        return new Observable<boolean>(subs => {
          this.subscriber = subs;
        });
      }
    
    public callNext() {
    
        if (this.subscriber) {
          this.subscriber.next();
          this.subscriber.complete();
        }
      }
    

相关问题