nie musisz tego robić, ponieważ HTTP obserwowalne dzwoni pełna jest natychmiast po akcja jest wykonywana.
Z kodu źródłowego sources Widzę, że po wypisaniu się jest wywoływany przy błędzie i po zakończeniu.
protected _error(err: any): void {
this.destination.error(err);
this.unsubscribe();
}
protected _complete(): void {
this.destination.complete();
this.unsubscribe();
}
poszedłem dalej i zrobił mały eksperyment dodając wypisać z limitu czasu
var subscription = this.http.get(`apiurl`)
.subscribe(response => {
setTimeout(function(){
debugger;
subscription.unsubscribe(); }, 30);
});
gdybym kroku wewnątrz unsibscribe do
Subscriber.prototype.unsubscribe = function() {
if (this.closed) { // this.closed is true
return;
}
this.isStopped = true;
_super.prototype.unsubscribe.call(this);
};
Następnie this.closed == true
, czyli wypisz nazwano wcześniej.
Więc tak teraz mogę powiedzieć na pewno nie trzeba zrezygnować :)
Można użyć '.take (1)' zmusić do wypowiedzenia OB i uniknąć wycieków pamięci. A więc: 'http.get (...). Take (1)' – AngularChef
@AngularFrance, jeśli szukasz źródeł https://github.com/ReactiveX/rxjs/blob/master/src/operator/take.ts będziesz zobacz, że tak, anuluj subskrypcję, ale ponieważ jest ona zimna, którą można obserwować, wtedy również zostanie wywołana, więc nie ma potrzeby, aby powiedzieć, weź 1, jeśli tylko 1 zostanie zwrócony –
Mam zaktualizowaną odpowiedź :) –