Я пытаюсь получить доступ к кэшированным данным в моей трубе, но всегда получает следующее сообщение об ошибке:Не может subscripe обслуживать кэш
Cannot read property 'subscribe' of undefined
служба:
import { Injectable } from '@angular/core';
import {Observable} from 'rxjs/Rx';
import 'rxjs/observable/of';
import 'rxjs/add/operator/map';
@Injectable()
export class FormDataService {
private apiUrl = "http://localhost";
private data:any;
private observable: Observable<any>;
constructor(
private _http: Http
){}
getCountries() {
if(this.data) {
console.log("data available");
return Observable.of(this.data);
} else if(this.observable) {
console.log("request pending")
return this.observable;
} else {
console.log("request data");
this.observable = this._http.get(this.apiUrl + "/country")
.map(res => {
console.log("data received");
this.observable = null;
this.data = res.json();
});
}
}
труба:
export class ResolvePipe implements PipeTransform {
constructor(
public _formDataService: FormDataService
) {}
transform(value: number, args: any[]): any {
return this._formDataService.getCountries().subscribe(
data => {
console.log(data);
return data;
}
)
}
}
У меня есть другой вопрос:
API-интерфейс возвращает массив объектов
[{id:1,label:"USA",id:2, label:"DE", ...}]
Труба должна заменить идентификатор (значение) с ярлыком ... где бы вы это сделать? В обслуживании или трубе?
Edit:
formdata.service.ts:27 request data
formdata.service.ts:30 data received
formdata.service.ts:27 request data
formdata.service.ts:24 request pending (822 times)
formdata.service.ts:30 data received
вы не можете подписаться на объект, который не существует. сначала создайте объект, затем попробуйте «подписаться» (вот что означает сообщение об ошибке) – zerohero