gpt4 book ai didi

angular - RXJS:返回外部可观察对象的操作值

转载 作者:搜寻专家 更新时间:2023-10-30 21:35:14 26 4
gpt4 key购买 nike

我正在尝试调用两个 observable,根据第二个的响应,我操作第一个,然后返回一个新的 observable。

return this.http.get(requestUrl)
.map((response: User) => {
sessionManager.currentUser = response;
return this.isFirstTimeUser(response.id);
})
.do((response: any) => {
console.log(response);
sessionManager.currentUser.firstTimeLogin = response === 'true';
return Observable.create(sessionManager.currentUser);
})
.toPromise();

isFirstTimeUser(response.id) 是另一个返回 observable 的函数。

private isFirstTimeUser(userId: number): Observable<any> {
const requestUrl = 'someUrl';
return this.http.get(requestUrl, {responseType: 'text'});
}

我想要做的就是从第一个 http 调用中获取用户对象,在第二次调用中使用用户的 id 发出另一个请求,然后在我从第二个可观察对象中取回响应后,我更新了第一个响应的属性并返回更新后的第一个响应。我如何实现这一目标?我应该查看哪个 rxjs 函数?

最佳答案

您正在寻找的解决方案是这样的:

getUser(): Observable<any>{
return this.http.get(reqUrl)
.do((res: User) => {
sessionManager.currentUser = res;
})
.switchMap((res: User) => {
return this.isFirstTimeUser(res.id);
})
.do((res: any) => {
console.log(response);
}
.map((res: any) => {
sessionManager.currentUser.firstTimeLogin = res === 'true';
return sessionManager.currentUser;
});
}

然后您只需要订阅 getUser() 就可以了。根据纯函数的 rxjs 函数范式,它仍然不是最好的代码。我想使用带有投影函数的 concatMap 会让我们更接近理想,但它会起作用。

它不理想的原因是因为在第一个 .do() block 中有一个必需的副作用,我们更新了 sessionManager 值 - 一个函数外部的变量(在功能世界中是一个很大的禁忌)然后我们在 .map() 函数中再次访问它。将投影函数作为第二个参数的 concatMap 可以帮助我们解决这个问题。

关于angular - RXJS:返回外部可观察对象的操作值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52304486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com