使用rxjs中的观察者/可观察者

使用rxjs中的观察者/可观察者,rxjs,Rxjs,我试图创建一个可观察的观察者,如下所示 我希望这将触发onNext on observer。这就是我的理解 让我知道这种理解是否正确?因为它不是这样工作的 Psuedo代码: @Injectable() export class HeroService { static eventname = []; static observable:Observable<string[]>; constructor() { this.init(); } ini

我试图创建一个可观察的观察者,如下所示

我希望这将触发onNext on observer。这就是我的理解

让我知道这种理解是否正确?因为它不是这样工作的

Psuedo代码:

@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没有可用的订户。它是怎么被清除的?