Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 RxJS订户取消订阅vs.完成_Javascript_Rxjs - Fatal编程技术网

Javascript RxJS订户取消订阅vs.完成

Javascript RxJS订户取消订阅vs.完成,javascript,rxjs,Javascript,Rxjs,我正在阅读RxJS文档,希望确保我理解Subscriber.unsubscribe()和Subscriber.complete()之间的区别 假设我有一个有两个订户的可观测对象,subscriber1和subscriber2。如果subscriber1对其订阅调用unsubscribe,它将不再接收来自可观察对象的通知,但subscriber2将继续接收这些通知 .complete()的文档: 观察者回调以从可观察者接收类型为complete的无值通知。通知观察者被观察者已完成发送基于推送的通知

我正在阅读RxJS文档,希望确保我理解
Subscriber.unsubscribe()
Subscriber.complete()之间的区别

假设我有一个有两个订户的可观测对象,subscriber1和subscriber2。如果subscriber1对其订阅调用unsubscribe,它将不再接收来自可观察对象的通知,但subscriber2将继续接收这些通知

.complete()
的文档:

观察者回调以从可观察者接收类型为complete的无值通知。通知观察者被观察者已完成发送基于推送的通知


这是否意味着在上面相同的场景中,subscriber1可以调用complete,它将结束observable并停止subscriber1和subscriber2的流?

根据我使用API的经验,想法是:您不调用
observable
,而
observable
调用您。如果创建
主题
下一步
/
完成
主题,则可以触发事件

这就是为什么您将看到一些示例,它们将“private”
Subject
作为类成员,但公开的项是可观察的。我们期望您订阅
可观察的
,顶级类将通过
主题
next()
error()
发送值。完成可观察/主题的唯一方法是
complete()
Subject


此外,Subscriber没有
unsubscribe()
方法,Subscribetion有。

订阅者不调用
complete()
。您可以对主题调用
complete()
,或者更典型的是,使用诸如
take()
takeWhile()

例如:

const s = new Subject();
const subscriber1 = s.subscribe(...);
const subscriber2 = s.subscribe(...);
s.complete(); // both subscribers will receive the complete notification

// or with `take(1)` operator it'll call `complete()` for you
const subscriber1 = s.take(1).subscribe(...);
const subscriber2 = s.take(1).subscribe(...);
s.next(42); // both subscribers will receive the complete notification
请注意,对主题调用
complete()
,会改变主题的内部状态,并且在取消订阅订阅者时无法再次使其不完整,而对主题没有任何影响


一个类似的问题:

您似乎混淆了订阅API和订阅API,请澄清。您是正确的,我再次查看了文档。我想这就是我对订阅者的看法:“观察员被转换成订阅者,以便提供类似于订阅的功能,比如取消订阅。”当Observable.subscribe返回的内容是订阅而不是订阅者时。Subject提供了取消订阅和完整订阅,因此看起来这就是我在代码中看到的内容,并假设它是基于文档的订阅者,oops。深入研究RxJS代码,似乎Subject.complete()会对它的每个观察者调用complete,其中as unsubscribe只是通过将观察者设置为null来删除主题中的所有观察者。很有趣,谢谢。