In einem Reiseführer für Angular 2 heißt es:Entsorgung des Abonnements, wenn beobachtbare vervollständigt
„Das Standardverhalten von Observablenoperatoren ist das Abonnements zu entsorgen, sobald Das Gesamt() oder .error() -Nachrichten sind veröffentlicht. Denken Sie daran, dass RxJS entworfen wurde, um die meiste Zeit in einer "Feuer und Vergessen" Mode verwendet zu werden. "
In einer früheren Seite gibt es ein Beispiel für beobachtbare und Abonnement.
Sie können dort sehen, dass nach 3 Sekunden die onbservable ".complete()" s. Wenn Sie jedoch erneut auf die Schaltfläche Init() klicken und die Methode init() aufrufen, wird der Abonnent weiterhin informiert. Also, was meint der Autor mit "disposed the subscription"?
Code:
import {Component} from '@angular/core';
import {Observable} from 'rxjs/Observable';
@Component({
selector: 'app',
template: `
<b>Angular 2 Component Using Observables!</b>
<h6 style="margin-bottom: 0">VALUES:</h6>
<div *ngFor="let value of values">- {{ value }}</div>
<h6 style="margin-bottom: 0">ERRORs:</h6>
<div>Errors: {{anyErrors}}</div>
<h6 style="margin-bottom: 0">FINISHED:</h6>
<div>Finished: {{ finished }}</div>
<button style="margin-top: 2rem;" (click)="init()">Init</button>
`
})
export class MyApp {
private data: Observable<Array<number>>;
private values: Array<number> = [];
private anyErrors: boolean;
private finished: boolean;
constructor() {
}
init() {
this.data = new Observable(observer => {
setTimeout(() => {
observer.next(42);
}, 1000);
setTimeout(() => {
observer.next(43);
}, 2000);
setTimeout(() => {
observer.complete();
}, 3000);
});
let subscription = this.data.subscribe(
value => this.values.push(value),
error => this.anyErrors = true,
() => this.finished = true
);
}
}