Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可观察实例在没有观察者(或订户?)的情况下发出_Javascript_Angular_Rxjs_Observable_Rxjs5 - Fatal编程技术网

Javascript 可观察实例在没有观察者(或订户?)的情况下发出

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(值); })您正在将多个对象混合在

我在Angular2中使用observable。到目前为止,我知道,每个可观察实例都有一个观察者(1:1),当我们用observer.next(value)发出一些东西时,我们可以用Observable.subscribe((value)=>{})获得该值

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