可观察实例在没有观察者(或订阅者?)的情况下发出
Observable instance emit without an observer (or subscriber ?)
我在 Angular2 中使用 observable。据我所知,每个 Observable 实例都有一个观察者(1:1),当我们用 observer.next(value) 发出一些东西时,我们可以用 observable.subscribe((value) => {}).
var observable = Observable.create(observer => {
observer.next(value);
}
.map(value=>{})
.catch(...)
observable.subscribe(value => {
console.log(value);
})
如何在不知道相应观察者的情况下发出值,因为我想在创建函数之外发出值。一种可能的解决方案是将观察者保存到某个全局变量中,但我认为一个可观察的就足够了。对此有什么建议吗??
你把很多东西混在一起了。 Observables 与 Observers 没有 1:1 关系(更准确地说是 1:N)。如果你希望能够手动发出值,你需要一个 Subject
,它同时充当 Observable 和 Observer。实际上,这意味着您可以调用它的 next()
方法,它会将值传播给它的所有订阅者(观察者)。
例如,在 TypeScript 中考虑以下代码:
import {Subject} from 'rxjs';
let source = new Subject();
source.subscribe(val => console.log('Observer 1:', val));
source.subscribe(val => console.log('Observer 2:', val));
source.next(42);
source.next('test');
这将打印到控制台:
Observer 1: 42
Observer 2: 42
Observer 1: test
Observer 2: test
观看现场演示:http://plnkr.co/edit/gWMFMnPlLJVDC1pQi8pH?p=preview
阅读更多:
- http://reactivex.io/intro.html
- https://github.com/Reactive-Extensions/RxJS#resources
- https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/creating.md
请注意 Observable.create()
是一种非常不同的动物。它将一个函数作为参数,每次新观察者订阅时,该函数都会被调用。这就是为什么它将新订阅的 Observer 作为参数。例如,在此函数中,您可以调用 Observer 上的 next()
方法,向其发送一些所有订阅者都需要接收的默认值。
所以您可能想使用 Subject
而不是 Observable.create()
。
我在 Angular2 中使用 observable。据我所知,每个 Observable 实例都有一个观察者(1:1),当我们用 observer.next(value) 发出一些东西时,我们可以用 observable.subscribe((value) => {}).
var observable = Observable.create(observer => {
observer.next(value);
}
.map(value=>{})
.catch(...)
observable.subscribe(value => {
console.log(value);
})
如何在不知道相应观察者的情况下发出值,因为我想在创建函数之外发出值。一种可能的解决方案是将观察者保存到某个全局变量中,但我认为一个可观察的就足够了。对此有什么建议吗??
你把很多东西混在一起了。 Observables 与 Observers 没有 1:1 关系(更准确地说是 1:N)。如果你希望能够手动发出值,你需要一个 Subject
,它同时充当 Observable 和 Observer。实际上,这意味着您可以调用它的 next()
方法,它会将值传播给它的所有订阅者(观察者)。
例如,在 TypeScript 中考虑以下代码:
import {Subject} from 'rxjs';
let source = new Subject();
source.subscribe(val => console.log('Observer 1:', val));
source.subscribe(val => console.log('Observer 2:', val));
source.next(42);
source.next('test');
这将打印到控制台:
Observer 1: 42
Observer 2: 42
Observer 1: test
Observer 2: test
观看现场演示:http://plnkr.co/edit/gWMFMnPlLJVDC1pQi8pH?p=preview
阅读更多:
- http://reactivex.io/intro.html
- https://github.com/Reactive-Extensions/RxJS#resources
- https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/creating.md
请注意 Observable.create()
是一种非常不同的动物。它将一个函数作为参数,每次新观察者订阅时,该函数都会被调用。这就是为什么它将新订阅的 Observer 作为参数。例如,在此函数中,您可以调用 Observer 上的 next()
方法,向其发送一些所有订阅者都需要接收的默认值。
所以您可能想使用 Subject
而不是 Observable.create()
。