我正在构建一个暴露Observable的服务.在这个服务中,我接收外部函数调用,它应该触发Observable的下一个调用,以便各种消费者获得订阅事件.在Observer构造函数中,我可以调用next,一切都很好,但是如何在构造函数外部访问它,以便外部触发器可以触发下一个调用?
private myObservable$: Observable<any>;
Run Code Online (Sandbox Code Playgroud)
在服务初始化期间我做
this.myObservable$ = new Observable(observer => {
observer.next("initial message");
}
Run Code Online (Sandbox Code Playgroud)
然后在同一服务的其他方法中,我希望能够执行类似的操作
this.myObservable$.observer.next("next message");
Run Code Online (Sandbox Code Playgroud)
以上显然不起作用,但我怎样才能实现这个目标呢?
我假设我缺少一些基本的东西,因为必须有一种方法可以在Observable的初始构造函数之外发出更多消息
ols*_*lsn 33
你应该创建一个Subject为
this.myObservable$ = new Subject();
Run Code Online (Sandbox Code Playgroud)
然后你可以随时打电话:
this.myObservable$.next(...);
Run Code Online (Sandbox Code Playgroud)
或使用订阅:
this.myObservable$.subscribe(...)
Run Code Online (Sandbox Code Playgroud)
实际上Subject,既用于发布者又用于订阅者,在这里我认为您只需要发布您的值,因此只需使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
两种方式:
公开 myObservable$:
public myObservable$: Observable;
Run Code Online (Sandbox Code Playgroud)将可观察的内容封装在主题流中,并提供一个帮助器来调用下一步:
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);
}
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
13186 次 |
| 最近记录: |