我试图更深入地了解反应式编程的基础知识,所以我将通过这里的示例: http://reactivex.io/rxjs/manual/tutorial.html#creating-observables
我只是在文本编辑器中输入它们并通过节点在终端中运行它们。第一个示例不生成输出(第二个示例有效,因此加载库不是问题)。我期待它输出'foo',但我一无所获。为什么呢?
var myObservable = Rx.Subject.create();
myObservable.subscribe(value => console.log(value));
myObservable.next('foo');
答案 0 :(得分:2)
在没有参数的情况下调用Rx.Subject.create()
会创建一个没有AnonymousSubject
观察者的destination
:
export class Subject<T> extends Observable<T> implements ISubscription {
...
static create: Function = <T>(destination: Observer<T>, source: Observable<T>): AnonymousSubject<T> => {
return new AnonymousSubject<T>(destination, source);
};
...
}
AnonymousSubject
的{{1}}实施只是将调用转发给destination
观察者,如果没有,则无效:
export class AnonymousSubject<T> extends Subject<T> {
constructor(protected destination?: Observer<T>, source?: Observable<T>) {
super();
this.source = source;
}
next(value: T) {
const { destination } = this;
if (destination && destination.next) {
destination.next(value);
}
}
...
}
所以你问题中的例子什么也没做。这可能是本教程中的一个简单错误,因为以下内容会显示foo
已登录到控制台:
var myObservable = new Rx.Subject();
myObservable.subscribe(value => console.log(value));
myObservable.next('foo');
请注意,上面的代码会创建Subject
,而不是AnonymousSubject
。