我正在尝试创建一个Observable和Observer,如下所示
我希望这会在观察者上触发onNext。这就是我的理解。
如果这种理解可以,请告诉我?因为它没有这样工作。
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);
}
}
当调用eventhandler时,我将新事件添加到eventname。 我期望观察者会被召唤。但在检查时,我发现没有订户。数组是lenth 0
eventHandler由WebSocket / SignalR Hub从服务器调用。
答案 0 :(得分:0)
您需要订阅您的观察信息。
this.observable.subscribe(observer);
从本教程中了解更多信息:https://egghead.io/lessons/rxjs-creating-observable-from-scratch
答案 1 :(得分:0)
看起来你期望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);
}
}
}