在观察者中删除订阅
Delete subscription in observer
我已经为我的 Angular 4 表单创建了一个 canDeactivate 处理程序。虽然这有效,但我担心我会导致内存泄漏(因为没有更好的术语)。我读到您必须退订以避免订阅列表不断增加;但我不确定 where/how 是否要取消订阅我在下面创建的订阅。 observer.complete 调用会删除订阅吗?
// Allow the user to navigate away from this page
public canDeactivate(): Observable<boolean> {
// Popup a prompt dialog
const title = 'Lose Changes';
const prompt = 'Are you sure you want to lose your changes?';
this.dialogWindow.show(EDialogTypes.EDialogYesNo, EDialogStyles.EDialogStyleWarning, title, prompt);
return Observable.create(observer => {
this.dialogWindow.observable.subscribe(buttonPressed => {
const proceed = (buttonPressed === EButtonPressed.EButtonPressedYes);
console.log('Allow proceed: ' + proceed);
observer.next(proceed);
observer.complete();
});
});
}
您可以将订阅保存到一个变量,并在获得所需内容后使用它取消订阅。像这样:
return Observable.create(observer => {
let subscription = this.dialogWindow.observable.subscribe(buttonPressed => {
const proceed = (buttonPressed === EButtonPressed.EButtonPressedYes);
console.log('Allow proceed: ' + proceed);
observer.next(proceed);
observer.complete()
subscription.unsubscribe(); // here you unsubscribe
});
});
我已经为我的 Angular 4 表单创建了一个 canDeactivate 处理程序。虽然这有效,但我担心我会导致内存泄漏(因为没有更好的术语)。我读到您必须退订以避免订阅列表不断增加;但我不确定 where/how 是否要取消订阅我在下面创建的订阅。 observer.complete 调用会删除订阅吗?
// Allow the user to navigate away from this page
public canDeactivate(): Observable<boolean> {
// Popup a prompt dialog
const title = 'Lose Changes';
const prompt = 'Are you sure you want to lose your changes?';
this.dialogWindow.show(EDialogTypes.EDialogYesNo, EDialogStyles.EDialogStyleWarning, title, prompt);
return Observable.create(observer => {
this.dialogWindow.observable.subscribe(buttonPressed => {
const proceed = (buttonPressed === EButtonPressed.EButtonPressedYes);
console.log('Allow proceed: ' + proceed);
observer.next(proceed);
observer.complete();
});
});
}
您可以将订阅保存到一个变量,并在获得所需内容后使用它取消订阅。像这样:
return Observable.create(observer => {
let subscription = this.dialogWindow.observable.subscribe(buttonPressed => {
const proceed = (buttonPressed === EButtonPressed.EButtonPressedYes);
console.log('Allow proceed: ' + proceed);
observer.next(proceed);
observer.complete()
subscription.unsubscribe(); // here you unsubscribe
});
});