gpt4 book ai didi

javascript - Rxjs throttleTime - 我们需要使用 asObservable 吗?

转载 作者:行者123 更新时间:2023-11-30 20:48:09 24 4
gpt4 key购买 nike

我一直在使用这两种(完全相同的方法)来调用 throttleTime,但我不确定它们是否真的相同。

this.scrollSubject$ = new Subject<Event>();
this.scrollSubscription$ = this.scrollSubject$
.asObservable()
.throttleTime(400, undefined, { trailing: true })
.subscribe(event => this.throttledScrollHandler(event));

同上,但使用asObservable

this.scrollSubscription$ = this.scrollSubject$
.throttleTime(400, undefined, { trailing: true})
.subscribe( event => this.throttledScrollHandler(event));

我忘记在我的第二个上添加 asObservable,但它的行为方式相同,这令人惊讶。这两种方式一样吗?

我在 Angular 中使用 Observables,但我认为这不是 Angular 特有的

最佳答案

题中问题的答案是:是的,如果要保证题主的nexterrorcomplete方法不能通过组合的可观察对象调用,您应该使用 asObservable

所以问题中的两个片段是不一样的。

Subject 实现了 lift .这意味着从运算符返回的可观察对象是一个 Subject。因此,除非调用 asObservable,否则可能会调用 nexterrorcomplete组合可观察。

const subject = new Rx.Subject();

const withoutAsObservable = subject
.do(value => console.log(value));
console.log("withoutAsObservable is a subject:", withoutAsObservable instanceof Rx.Subject);

const withAsObservable = subject
.asObservable()
.do(value => console.log(value));
console.log("withAsObservable is a subject:", withAsObservable instanceof Rx.Subject);

subject.subscribe(
value => console.log("subject value:", value),
error => console.log("subject error:", error)
);
withoutAsObservable.next("some value");
withoutAsObservable.error(new Error("some error"));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>

有关提升的更多信息,请参阅this issue .


关于您对另一个答案的评论:

I can call this.scrollSubscription$['next'](new Event('asdf'));, and throttledScrollHandler() will print out that event

Subscription 上调用 next 会调用从 创建的 Subscriber 上的 next 方法>next 您传递给 subscribe 的函数。它与主题无关,也不等同于调用主题的 next 方法。

订阅的实现calls toSubscriber和那个订户is returned . Subscriber extends Subscription , 但它也有一个 next method .这就是你所说的。

关于javascript - Rxjs throttleTime - 我们需要使用 asObservable 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48477299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com