EDITのプロパティ「退会」を読み込めません:私は、この問題を解決しました。誰かを助けるかもしれないので、私の答えを見てください。あなたがより良い答えを知っているなら、それを投稿してください!私はAngular 2 Universal APIキャッシュに取り組んでおり、このようなApiServiceを持っています:)角度2 HTTPは、RxJSは未定義
:
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();
})
}
:私は、私はそれを購読する別のサービス、で
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);
}
}
要求されたデータがキャッシュになく、サーバーがHTTP要求を行う必要がある場合、上記のコードは完全に機能します。データがキャッシュにをされた場合は、しかし、私は次のエラーを取得する:Cannot read property 'unsubscribe' of undefined
は未定義、もちろん、私の変数sub
を参照しています。
私の最初に考えたのは、私が観察角度2のHTTP対キャッシュに作成してい観測の種類が異なっているので、エラーを作成することです。私はこれをテストしようとしましたが、それを確認する方法はありません。どんな助けもありがとうございます。
なぜあなたは 'next'ブロック内unsubscribe''呼んでいますか?また、Observable.of(cached_data)という単一項目の作成メソッドも既に存在します。 – paulpdaniels
また、 'sub.next()'の後に 'sub.complete()'を呼び出して、完了時に自動的に退会するobservableを完成させることができます。 – tomastrajan