angular - 将服务中方法的返回值传递给另一个方法
问题描述
我有一个连接到 2 个不同 API 端点的服务,这个服务获取用户的 id 和一个 JWT 令牌:
@Injectable()
export class UserService {
appLogin = 'http://url.for.the.login.api';
//returns id and token
userData = 'http://url.for.the.user_info.api';
//returns user info
constructor(private http: HttpClient) { }
getAll() {
return this.http.get<User[]>(`${this.appLogin}`);
//gets id and token, can display values in the template like this {{currentUser.id}}
}
}
然后我需要另一个方法使用 id 和返回的令牌来使用这些值来发出另一个GET
请求,如下所示:
http://url.for.the.user_info.api/userID?token=token_string
我有这个:
getInfo(id: number, token: string) {
let userData = this.http.get<User[]>(`${this.appLogin}` + id + '?token=' + token);
return this.http.get<User[]>(`${userData}`);
}
但是我迷路了,谢谢你的帮助。
解决方案
您可以使用该switchMap
功能,如下所示:
return this.http.get<User[]>(`${this.appLogin}` + id + '?token=' + token)
.pipe(switchMap(userData) => this.http.get<User[]>(`${userData}`))
您可能需要添加以下导入语句switchMap
:
import { switchMap } from 'rxjs/operators';
通过管道传递原始请求switchMap
,我们可以创建一个新的Observable
推荐阅读
- javascript - 使用 Node 和 AWS Lambda 保护图像上传
- google-cloud-platform - Google OAuth 缩小范围
- php-7.3 - 致命错误:未捕获的错误:调用未定义的函数 ereg()
- java - 使用eclipse插件中的行号从jdt java文本编辑器中突出显示文本
- c# - 按下火空格键时会播放 AudioSource?
- python - 使用python提取回归系数
- html - 最好的 flexbox 包装器/图像配置是什么?
- .htaccess - 正确 .htaccess 将所有 https:// 页面重定向到 https://www
- javascript - 如何使删除按钮和完成按钮在 ToDO List Javascript 上工作
- python - 在 Virtualenv 中的 Pip 安装工作,但 * 不 * 使用 `-r requirements.txt`