編輯:我已經解決了這個問題。請參閱下面的答案,因爲它可能有助於某人。如果你知道更好的答案,請發佈! :)Angular 2 Http,RxJS無法讀取undefined屬性'unsubscribe'
我工作的一個Angular 2 Universal API緩存,並有一個這樣的ApiService:
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);
}
}
在另一個服務,在這裏我訂閱它,我有:
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();
})
}
如果請求的數據不在緩存中,並且服務器必須爲其發出http請求,則上述代碼完美工作。但是,如果緩存中的數據爲,則會出現以下錯誤:Cannot read property 'unsubscribe' of undefined
未定義,當然是指我的變量sub
。
我最初的想法是,我在緩存中創建的Observable類型與Angular 2的Http observable是不同的,因此會產生錯誤。我試過這個,但沒辦法確認。任何幫助表示讚賞。
你爲什麼要在'next'塊中調用'unsubscribe'?此外,還有一個單一項目「Observable.of(cached_data)」的創建方法。 – paulpdaniels
你也可以在'sub.next()'後面調用'sub.complete()'完成在完成時自動退訂的observable。 – tomastrajan