【发布时间】:2019-04-28 23:25:21
【问题描述】:
我是 Angular 的新手,我正在尝试将 Spotify API 中的令牌传递给 Angular 中的服务方法,所以我有一个端点可以获取令牌并可以工作,但是当我调用 getQuery() 方法时输出'headers' 的对象类似于:
{
Authorization: Bearer undefined
}
因此,当我想发出请求时,它会抛出 401 状态,因为我的访问令牌不正确。
这是我的服务和构造方法的样子:
import { Injectable } from '@angular/core';
import { HttpClient,HttpHeaders } from '@angular/common/http';
import { map } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class SpotifyService {
private token:string
constructor(
private http:HttpClient,
) {
const clientId = 'my client id';
const clientSecret = 'my client secret';
this.getToken(clientId, clientSecret);
}
这就是我的 getToken() 方法的样子:
getToken(clientId:string, clientSecret:string){
const urlRequest = `https://myendpoint/${clientId}/${clientSecret}`;
this.http.get(urlRequest)
.subscribe( (data:any) =>{
this.token = data.access_token;
});
}
此时一切正常,但是当我从组件调用此服务并调用另一个服务方法时,构造函数似乎没有执行,因为我在此服务方法上遇到了未定义的问题:
getQuery( query:string ){
const url = `https://spotifyapi/${query}`;
const headers = new HttpHeaders({
'Authorization': `Bearer ${this.token}`
});
console.log(headers);
return this.http.get(url,{headers});
}
我使用console.log() 来检查我是否在 getToken() 中获取令牌并且它可以工作,但似乎我无法通过getQuery() 方法访问它。
我只想让该方法中的令牌可以访问,以便我可以发出请求。
【问题讨论】:
-
猜猜当你发送查询时,
getToken还没有完成,此时令牌未定义 -
您应该考虑查看诸如 switchMap 之类的运算符,以按照所需顺序将这些调用“链接”在一起,并将逻辑移出构造函数。
标签: angular typescript