Angular8 MergeMap 串联请求中,第三级如何拿到第一级的值?

发布于 2022-09-12 04:47:32 字数 1473 浏览 13 评论 0

解决了。httpthis 拿出来用,存储 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

对不⑦ 2022-09-19 04:47:32

经测试,http 不用 this 转化,内层拿得到。

 const that = this;
 let tokenQ = '';

在第一次拿到 token 后:

 tokenQ = res.credentials.token;

在其它地方,就可以 that.tokenQ 了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文