I'm trying to build an API service in Ionic with Angular to handle the calls to my API.
I'm using Bearer tokens, and have set the token in storage. I now need to get that token to make API calls.
I'm retrieving the token in the constructor
this.authService.fetchToken().then(token => {
this.authToken = token;
});
This is what I've been playing around with, and it works, but only if I hardcode the token (instead of using this.token
)
getUsers(): Observable<User[]> {
return this.http.get<User[]>(this.url + '/users', {
headers: { 'Authorization': 'Bearer ' + this.authToken }
})
.pipe(
tap(_ => console.log('users fetched')),
catchError(this.handleError<User[]>('getUsers()'))
);
}
I've tried wrapping the token fetch around the http call, but the IDE throws an error that I'm not returning anything
getUsers(): Observable<User[]> {
this.authService.fetchToken().then(token => {
return this.http.get<User[]>(this.url + '/users', {
headers: { 'Authorization': 'Bearer ' + this.authToken }
})
.pipe(
tap(_ => console.log('users fetched')),
catchError(this.handleError<User[]>('getUsers()'))
);
});
}
This is how I'm calling it in my home.page.ts
file
getUsers() {
return this.apiService.getUsers().subscribe((data: any) => {
this.users = data.data;
});
}
Pulling my hair out at this point, as I've probably tried about 20 different ways to do this and each thing I try either throws an error or doesn't return anything.
This is what I was originally using in my home.page.ts
file, but it didn't seem to work too well in an API service, which is why I'm trying observables
async getData(): Promise<any> {
await this.authService.fetchToken().then(token => {
if (token) {
this.http.get(this.apiService.url + '/users', {
headers: { 'Authorization': 'Bearer ' + token }
}).subscribe(
(result: any) => {
this.users = result.data;
}, error => {
this.toastService.oops();
});
}
});
}
1条答案
按热度按时间ix0qys7i1#
您缺少return语句。而且我不确定您是否应该将observable和promises混合在一起-这只会使您的工作更加困难。(因此您最好将fetchToken也转换为返回observable。)