EDIT: Ich habe dieses Problem gelöst. Bitte sehen Sie meine Antwort unten, da es jemandem helfen kann. Wenn Sie eine bessere Antwort wissen, bitte posten Sie es! :)Angular 2 Http, RxJS Kann die Eigenschaft "unsubscribe" von undefined nicht lesen
Ich arbeite an einem Angular 2 Universal API-Cache und haben eine ApiService wie folgt aus:
import {Http} from '@angular/core';
export class ApiService {
constructor(private http: Http, private cache: CacheService)
}
get(url) {
if (cache_data) {
//Create new observable from scratch
return new Observable(sub => {
sub.next(cache_data);
});
} else {
//Use Angular 2's Http service, which creates an Observable for me
return this.http.get(url)
.map(res => res.json())
.catch(err => throw err);
}
}
In einem anderen Dienst, wo ich ihn abonnieren, ich habe:
import {ApiService} from './api/api.service';
export class ConsumerService {
constructor(apiService: ApiService) {}
let sub = this.apiService.get('www.example.com')
.subscribe(data => {
console.log(data);
sub.unsubscribe();
})
}
Wenn sich die angeforderten Daten nicht im Cache befinden und der Server eine HTTP-Anforderung dafür erstellen muss, funktioniert der obige Code einwandfrei. Wenn Daten in den Cache ist, erhalte ich jedoch die folgende Fehlermeldung: Cannot read property 'unsubscribe' of undefined
Nicht definiert bezieht sich natürlich auf meine Variable sub
.
Mein erster Gedanke ist, dass die Art der Observable, die ich im Cache vs Angular 2 Http Observable erstellen, sind unterschiedlich, und damit einen Fehler zu erstellen. Ich habe versucht, das zu testen, aber ich habe keine Möglichkeit, es zu bestätigen. Jede Hilfe wird geschätzt.
Warum rufen Sie im 'next' Block' Abmelden' an? Auch gibt es bereits eine Erstellungsmethode für einzelne Objekte 'Observable.of (cached_data)'. – paulpdaniels
Sie können auch 'subcomplete()' nach 'sub.next()' aufrufen, um die Observable zu vervollständigen, die sich nach Abschluss automatisch austragen. – tomastrajan