Jer*_*mas 6 javascript observable rxjs
我对可观察到的新手很担心内存泄漏.如果我创建以下内容:
private client = new BehaviorSubject("");
clientStream$ = this.client.asObservable();
Run Code Online (Sandbox Code Playgroud)
和susbscirbe在他们看来像这样:
this.clientService.clientStream$.subscribe(
client => {
this.client = client;
}
}
Run Code Online (Sandbox Code Playgroud)
我需要取消订阅吗?如果我打电话client.getValue()怎么办?
我需要取消订阅吗?
大概.
如果您正在设计一个将完成的主题 - 即,如果您打算打电话client.complete()(或者client.onCompleted()如果您正在使用rxjs 4) - 那么这将自动拆除订阅.
但通常情况下,您的行为主体会在某种服务中持续存在,并且您不希望它完成.在这种情况下,您需要取消订阅.您可以通过两种方式取消订阅:
1)手动:
当你调用.subscribe时,你会收到一个订阅对象.如果你打电话.unsubscribe()(.dispose()在rxjs 4中),你将取消订阅.例如:
const subscription = this.clientService.clientStream$
.subscribe(client => this.client = client);
setTimeout(() => subscription.unsubscribe(), 10000); // unsubscribe after 10 seconds
Run Code Online (Sandbox Code Playgroud)
2)基于另一个可观察的自动.如果您经常在应用程序中使用可观察对象,您可能会发现这种方法非常方便.
Observables有一个.takeUntil运算符,您可以将其传递给另一个observable.当第二个observable发出一个值时,它会为你取消订阅.这可以让你预先描述什么条件应该拆除你的观察.例如:
this.clientService.clientStream$
.takeUntil(Observable.timer(10000))
.subscribe(client => this.client = client);
Run Code Online (Sandbox Code Playgroud)
如果我调用client.getValue()怎么办
这将同步为您提供当前值.你根本没订阅.从好的方面来说,这意味着您无需取消订阅.但是,在不利方面,如果您不想看到价值何时发生变化,您为什么要使用行为主题?
| 归档时间: |
|
| 查看次数: |
7227 次 |
| 最近记录: |