Angular8 MergeMap 串联请求中,第三级如何拿到第一级的值?
解决了。
将 http
的 this
拿出来用,存储 token
就可以了。
用 MergeMap
多次请求,第一次拿到 token
,想在第二次以后的调用中使用.
(第二次MergeMap) tokenRes
如何取值 ?
getInfo(): Observable<any> {
const httpThis = this;
const headers = new HttpHeaders().set('Content-Type', 'application/json')
.set('Content-Type', 'application/x-www-form-urlencoded');
const body = '<tsRequest>' +
'<credentials name="ywm" password="ywm" >' +
'<site contentUrl=""/>' +
'</credentials>' +
'</tsRequest>';
const hdr = { headers };
return httpThis.http.post(this.uri_tableau + 'api/3.8/auth/signin', body, hdr)
.pipe(map(
(res: {credentials: Token}) => {
return res.credentials.token;
}),
mergeMap((tokenRes: string) => {
const headersSite = new HttpHeaders().append('X-Tableau-Auth', tokenRes)
const hdrSite = { headers: headersSite };
return httpThis.http.get(this.uri_tableau + 'api/3.9/sites', hdrSite)
.pipe(map(
(sitesRes: {sites: Sites}) => {
return sitesRes.sites.site[0].id;
}
))
}),
mergeMap((sitesId: string) => {
const headersProject = new HttpHeaders().append('X-Tableau-Auth', tokenRes)//*此处 tokenRes 拿不到值
const hdrProject = { headers: headersProject };
return httpThis.http.get(this.uri_tableau + 'api/3.9/sites/' + sitesId + '/projects', hdrProject)
.pipe(map(
(projectRes: {projects: Projects}) => {
return projectRes.projects.project;
}
))
})
);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
经测试,
http
不用this
转化,内层拿得到。在第一次拿到 token 后:
在其它地方,就可以
that.tokenQ
了。