使用rxjs中的观察者/可观察者
我试图创建一个可观察的观察者,如下所示 我希望这将触发onNext on observer。这就是我的理解 让我知道这种理解是否正确?因为它不是这样工作的 Psuedo代码:使用rxjs中的观察者/可观察者,rxjs,Rxjs,我试图创建一个可观察的观察者,如下所示 我希望这将触发onNext on observer。这就是我的理解 让我知道这种理解是否正确?因为它不是这样工作的 Psuedo代码: @Injectable() export class HeroService { static eventname = []; static observable:Observable<string[]>; constructor() { this.init(); } ini
@Injectable()
export class HeroService {
static eventname = [];
static observable:Observable<string[]>;
constructor() { this.init(); }
init() {
subscribe();
eventhandler = function (name) {
HeroService.eventname.push(name);
};
}
subscribe(): void {
HeroService.observable = Observable.of (HeroService.eventname);
var observer = {
next: x => console.log('Observer got a next value: ' + x),
error: err => console.error('Observer got an error: ' + err),
complete: () => console.log('Observer got a complete notification'),
};
HeroService.observable.subscribe (observer);
}
}
@Injectable()
导出类服务{
静态事件名称=[];
静态可观察:可观察;
构造函数(){this.init();}
init(){
订阅();
eventhandler=函数(名称){
HeroService.eventname.push(名称);
};
}
订阅():无效{
HeroService.observable=observable.of(HeroService.eventname);
var观察员={
next:x=>console.log('Observer获得了下一个值:'+x),
错误:err=>console.error('Observer得到错误:'+err),
complete:()=>console.log('观察者收到完整通知'),
};
HeroService.observate.subscribe(观察者);
}
}
调用eventhandler时,我将新事件添加到eventname。
我原以为观察员会被叫来。但在检查时,我发现没有订户。数组的长度为0
eventHandler由WebSocket/SignalR Hub从服务器调用。您需要订阅您的observable
this.observable.subscribe(observer);
从本教程中了解更多信息:看起来您期望的是
HeroService.observable=observable.of(HeroService.eventname)
以“监视”事件名称数组。这不是真正的工作原理。某些东西必须发出(或下一个)值
与其尝试使用观察者和可观察者,不如尝试使用主体。确保只暴露主体的可观察部分
大概是这样的:
import { Component, OnInit } from '@angular/core';
import { Subject, Observable } from 'rxjs';
@Component({
selector: 'home',
template: require('./home.component.html')
})
export class HomeComponent {
private eventNames = [];
private eventListSubject: Subject<string[]> = new Subject<string[]>();
constructor() {
}
get eventList(): Observable<string[]> {
return this.eventListSubject;
}
ngOnInit() {
this.eventList.subscribe(
(x) => console.log('Observer got a next value: ' + x),
(err) => console.error('Observer got an error: ' + err),
()=> console.log('Observer got a complete notification')
);
}
eventHandler(name: string): Function {
return (name) => {
this.eventNames.push(name);
this.eventListSubject.next(this.eventNames);
}
}
}
从'@angular/core'导入{Component,OnInit};
从“rxjs”导入{Subject,observeable};
@组成部分({
选择器:“主页”,
模板:require(“./home.component.html”)
})
导出类HomeComponent{
私有事件名称=[];
私有事件列表主题:主题=新主题();
构造函数(){
}
获取事件列表():可观察{
返回此.eventListSubject;
}
恩戈尼尼特(){
此文件为.eventList.subscribe(
(x) =>console.log('观察者获得下一个值:'+x),
(err)=>console.error('观察者收到错误:'+err),
()=>console.log('观察者收到完整通知')
);
}
eventHandler(名称:string):函数{
返回(名称)=>{
this.eventNames.push(name);
this.eventListSubject.next(this.eventNames);
}
}
}
已经添加了这一点。忘记将其写入伪代码。无论如何但是在init期间只调用一次。然后自动发送“完成”消息。因此,当未触发更改eventname观察者时,现在在初始化过程中只会触发一次。之后,如果我检查observer没有可用的订户。它是怎么被清除的?