Javascript 可观察实例在没有观察者(或订户?)的情况下发出
我在Angular2中使用observable。到目前为止,我知道,每个可观察实例都有一个观察者(1:1),当我们用observer.next(value)发出一些东西时,我们可以用Observable.subscribe((value)=>{})获得该值Javascript 可观察实例在没有观察者(或订户?)的情况下发出,javascript,angular,rxjs,observable,rxjs5,Javascript,Angular,Rxjs,Observable,Rxjs5,我在Angular2中使用observable。到目前为止,我知道,每个可观察实例都有一个观察者(1:1),当我们用observer.next(value)发出一些东西时,我们可以用Observable.subscribe((value)=>{})获得该值 var observable=observable.create(observable=>{ 下一步(值); } .map(值=>{}) .catch(…) 可观察。订阅(值=>{ console.log(值); })您正在将多个对象混合在
var observable=observable.create(observable=>{
下一步(值);
}
.map(值=>{})
.catch(…)
可观察。订阅(值=>{
console.log(值);
})
您正在将多个对象混合在一起。可观察对象与观察者之间不是1:1的关系(更准确地说是1:N)。如果您希望能够手动发出值,您需要一个同时充当可观察对象和观察者的对象。实际上,这意味着您可以调用它的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
见现场演示:
阅读更多:
next()
方法发送给观测者一些所有订阅需要接收的默认值
所以你可能想用
Subject
而不是Observable.create()
也许你在找这样的东西?哦,看起来这可以用Subject而不是Observable来完成,非常感谢!!我会花时间进一步研究它。或者我想也许我可以创建一个做我需要的事情的类:)主题是要走的路。还要注意的是,它不是1:1,你可以订阅多次哦,我错了,我以为每次订阅都只有一个观察者,但每次订阅都会创建一个不同的观察者。真是可怕的误解。主题是您需要使用的主题。它相当于角度1中的q.defer()。然后在函数中返回主题,这相当于defer.promise。还有defer.reject=subject.error(),subject.next=defer.resolve谢谢你的详细回答,但还有一点让人困惑的是,我可以使用map
操作来处理subject
@dttung1412当然可以Subject
扩展了Observable
,因此它将所有操作符都设置为Observable