我试图弄清楚为什么我看到的所有Angular应用都会为变量分配订阅,只需要通过ngOnDestroy()取消订阅。例如:
export class ViewBookPageComponent implements OnDestroy {
actionsSubscription: Subscription;
constructor(store: Store<fromRoot.State>, route: ActivatedRoute) {
this.actionsSubscription = route.params
.select<string>('id')
.map(id => new book.SelectAction(id))
.subscribe(store);
}
ngOnDestroy() {
this.actionsSubscription.unsubscribe();
}
}
如果我只删除actionsSubscription会怎么样?订阅是否仍会创建但不会被销毁?在下面的例子中,你仍然会产生副作用,但不必打扰取消订阅。垃圾收集也需要actionsSubscription吗?
export class ViewBookPageComponent {
constructor(store: Store<fromRoot.State>, route: ActivatedRoute) {
route.params
.select<string>('id')
.map(id => new book.SelectAction(id))
.subscribe(store);
}
}
答案 0 :(得分:1)
您是对的,如果您完全删除actionsSubscription
,则仍会创建subscription
,但您将无法通过unsubscribe
通过ngOnDestroy
observable
创建unsubscribe
你离开组件。如果没有取消订阅,unsubscribe
可能仍会保留流数据,即使在远离组件后也会如此,从而导致内存泄漏。因此,为变量分配可观察的订阅并强制AsyncPipe
可确保在销毁组件时停止来自该observable的数据流。
我从Brian Love那里了解了# convert list into dictionary
d = dict(tuple(passwords))
try:
d[passwordToLookup]
except KeyError:
# what to do if no password available
else:
# what to do if available
return d.get(passwordToLookup, default=None)
的更多信息。
我从中注意到一件重要的事情 -
如果您通过
values = list(zip(*passwords)) try: the_password = values[1][values[0].index(passwordToLookup)] except ValueError: # what to do if no password available else: # what to do if available
使用可观察流,那么您不会 需要担心取消订阅。异步管道将负责 订阅和取消订阅。
希望这有帮助。