gpt4 book ai didi

rxjs - .unsubscribe 和 .take(1) 之间的区别

转载 作者:行者123 更新时间:2023-12-02 23:33:08 26 4
gpt4 key购买 nike

我想知道,在使用 unsubscribe 后,使用 .take(1).unsubscribe 之间的性能是否有任何差异订阅:

var observable = Rx.Observable.interval(100);

第一:

var subscription = observable.subscribe(function(value) {
console.log(value);
}).unsubscribe();

第二:

var subscription = observable.take(1).subscribe(function(value) {
console.log(value);
});

它的任何想法会对性能产生不同的影响吗?

最佳答案

每个都有不同的用途,因此很难对它们进行比较。

一般来说,如果您采用此来源:

const source = range(1,3);

...并使用 subscribe() 使用它,然后立即使用 unsubscribe():

source.subscribe(
console.log,
undefined,
() => console.log('complete')
).unsubscribe();

...那么即使我们在订阅后立即调用 unsubscribe() ,来自 source 的所有值都将被发出。这是因为代码仍然是严格顺序(同步)的,并且是一个冷Observable。

1
2
3
complete

顺便说一句,尝试添加 delay(0) 运算符来制作 source.pipe(delay(0)).subscribe(...).unsubscribe()。这使得使用实际的 setTimeout() 调用异步发出值,因此 unsubscribe() 在任何 next 处理程序之前被调用,并立即被丢弃.

换句话说,unsubscribe() 让您可以随时停止接收值。即使源没有发出任何值(我们从未收到任何完整的通知)。

使用 take() 运算符将链限制为仅发出特定数量的值。

source.pipe(
take(1),
)
.subscribe(
console.log,
undefined,
() => console.log('complete')
);

这只是发出一个值并完成:

1
complete

即使添加 .unsubscribe() 结果也是一样的。

查看现场演示:https://stackblitz.com/edit/rxjs-tbu5kb

所以 take() 是一个运算符,而 unsubscribe()Subscription 上的一个方法目的。这两件事经常可以互换,但它们永远不能完全替代。

2019 年 1 月:针对 RxJS 6 进行了更新

关于rxjs - .unsubscribe 和 .take(1) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40563065/

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