Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
Rxjs 关于理解RX中可观察对象和主体之间的差异的困惑_Rxjs_Rx Swift_Reactivex_Frp - Fatal编程技术网

Rxjs 关于理解RX中可观察对象和主体之间的差异的困惑

Rxjs 关于理解RX中可观察对象和主体之间的差异的困惑,rxjs,rx-swift,reactivex,frp,Rxjs,Rx Swift,Reactivex,Frp,在阅读了大量关于堆栈溢出的文章之后,我仍然对Rx中可观察和主题之间的区别感到非常困惑 基本上,大多数人指出两者之间的关键区别在于“主题类继承了Observable和Observable,即它既是Observable又是Observable”,可以通过以下代码片段来演示: var subject = new Rx.Subject(); var subscription = subject.subscribe( function (x) { console.log('onNext: ' + x);

在阅读了大量关于堆栈溢出的文章之后,我仍然对Rx中可观察和主题之间的区别感到非常困惑

基本上,大多数人指出两者之间的关键区别在于“主题类继承了Observable和Observable,即它既是Observable又是Observable”,可以通过以下代码片段来演示:

var subject = new Rx.Subject();

var subscription = subject.subscribe(
function (x) { console.log('onNext: ' + x); },
function (e) { console.log('onError: ' + e.message); },
function () { console.log('onCompleted'); }
);

subject.onNext(1);
// => onNext: 1

subject.onNext(2);
// => onNext: 2

subject.onCompleted();
// => onCompleted
我理解,在本准则的以下部分中,主体是可订阅的可观察者的角色:

var subscription = subject.subscribe(
function (x) { console.log('onNext: ' + x); },
function (e) { console.log('onError: ' + e.message); },
function () { console.log('onCompleted'); }
);
真正让我困惑的是这一部分:

subject.onNext(1);
// => onNext: 1

subject.onNext(2);
// => onNext: 2

subject.onCompleted();
// => onCompleted
看起来这里它证明了subject也可以扮演观察者的角色,但我的理解是,在这里subject还提供值/事件(发送1、2和完整事件)那么,为什么受试者在上述代码中被视为观察者的角色


非常感谢。

正是因为
onNext
onCompleted
被调用,主体被视为在参考代码中扮演观察者的角色。
观察者
被定义为一个对象,您可以在该对象上调用
onNext
onCompleted
(以及
onError

对象可以被其他人消费(可观察),也可以作为发射器(观察者)。当它用于发出事件时,它的角色是observer在您提供的代码中,主体仅充当可观察的
。它可以像将其传递给
订阅
函数一样使用。例如:
interval(1000)。subscribe(subject)
@fanchuengi尽管是可观察的发出事件?为什么观察者也能发出事件?你能详细说明一下吗?:)也许你可以先看看这里:@FanCheung这个链接很有帮助。非常感谢。