The problem
I dont know how to use the value of the currently returned Observable of getUserHeaders() in my http.get.
Current error
Type 'Observable<void>' is not assignable to type 'Observable<Participant[]>'
Expected result
Being able to use the value of my Observable returning method getUserHeaders() as a headers attribute within the http call. While only returning the http call's Observable.
Previous code
(which worked with harcoded Headers returned by getUserHeaders() (so not an Observable or Promise).
getAllParticipants(): Observable<Array<Participant>> {
return this.http.get('someUrl',
{headers: this.getUserHeaders()})
.map(response => {
return response.json();
});
});
}
Current code
going by Chaining RxJS Observables from http data in Angular2 with TypeScript 's answer I came to the flatMap method. (note this code currently throws the 'current error')
getUserHeaders(): Observable<Headers> {
let headers: Headers = new Headers();
return NativeStorage.getItem("user").map(
data => {
headers.append('API_KEY', data.json().apiKey);
headers.append('DEVICE_ID', data.json().deviceId);
return headers
}).catch( error => {
console.log("error");
headers.append('API_KEY', 'TEST');
headers.append('DEVICE_ID', 'TEST');
return headers;
}
);
}
/** retrieves ALL the participants from the database */
getAllParticipants(): Observable<Array<Participant>> {
return this.getUserHeaders().flatMap( data => {
return this.http.get('someUrl', {headers: data}).map(response => {
return response.json();
});
});
}
plunkr (Promise instead of Observable)
http://plnkr.co/edit/A0tEB9EUodWQS6AnqrtH?p=info
(note: Observable.fromPromise() didn't work here so I have created the two methods returning promises -- now I want to use the value of getUserHeaders() inside the promise of getParticipants() and still return the promise/observable of getParticipants() and nothing from getUserHeaders()
Array<Participant>is wrong here becauseresponse.json()isany.Array<Participant>note: the methodgetAllParticipantsworked well before, I'm just trying to incorporate theHeadersfrom thegetUserHeaders()methodArray<Participant>from Typescript's perspective. And you didn't explain what is the problem.