我在角度中使用http嵌套调用。
首先致电获取令牌。 第二次调用将使用令牌并返回实际数据。
[a-z0-9A-Z.-]+
该函数返回 public get(api) {
return this.http.get(this.url + '/token')
.map(res => res.json())
.toPromise()
.then((data: any) => {
this.access_token = data.access_token
let headers = new Headers();
headers.append('Authorization', 'Bearer ' + this.access_token);
return this.http.get(this.url + api, {
headers: headers
}).map(res => res.json());
})
}
。如何解析响应,以便我可以从订阅中的嵌套调用中获取数据。
Promise<Observable<any>>
答案 0 :(得分:5)
您可以使用switchMap之类的RxJS运算符来简化此嵌套调用,而无需使用toPromise()
。
映射到可观察的,完整的先前内部可观察值,发出值。
您实际上是将第一个observable的发射值传递给下一个observable(第二个HTTP调用)。这允许您在使用示例中订阅最终结果。
重要的是,在switchMap()
你return
内部的observable,在这种情况下,HTTP调用才能有效地发挥作用。
正如其他人所指出的那样,toPromise()
不是必需的,因为您可以利用RxJS运算符来完成此异步,依赖操作。
public get(api) {
return this.http.get(this.url + '/token')
.map(res => res.json())
.switchMap(data => {
this.access_token = data.access_token;
let headers = new Headers();
headers.append('Authorization', 'Bearer ' + this.access_token);
return this.http.get(this.url + api, { headers: headers });
})
.map(res => res.json());
}
<强>使用强>
this.get('me/profile').subscribe(data => console.log(data));
注意:使用Angular 4+ HttpClient时,您无需在响应中明确调用json()
,因为它会自动执行此操作。
希望这有帮助!