gpt4 book ai didi

RxJS 在第一次成功时调用第二次操作

转载 作者:行者123 更新时间:2023-12-05 07:50:12 27 4
gpt4 key购买 nike

我正在使用 Angular2 和 rxjs。

我有一个名为 login() 的操作。这将使用 http.post 请求将身份验证详细信息发送到服务器,然后将收到一个 token 。

它需要读取结果,如果成功接收到 token ,它将执行一些操作来验证 token 并对其进行解码,如果所有这些都正常,那么它会将用户名从 token 发送到服务器http.get 并检索用户的详细信息。

我希望以上所有内容都作为一个 Observable 返回,但我绞尽脑汁想知道应该如何使用 RxJS 方式构建应该一个接一个发生的两个操作。

我不认为订阅第一个操作然后在第一个操作中调用第二个操作是“正确”的方式,因为这样你如何捕获第一个操作中的失败。

是这样的吗?

this.http.post('http://localhost/auth/token', creds, {
headers: headers
})
.map(res => res.json())
.do(
// validate token
// decode token
)
.thenDo(
// get user details
this.http.get(url, options)
.map(res => res.json())
.do(
//save user and token in localStorage
)
)

最佳答案

我不太了解 Rxjs 的 do 和 thenDo 函数,但是你可以这样做

 this.http.post('http://localhost/auth/token', creds, {
headers: headers
})
.map(res => {
return [{status: res.status , json: res.json()}]
})
.subscribe(res=>{
if(res[0].status == 200){ // do you action depends on status code you got assuming 200 for OK response
this.validateToken() // Validate your token here in some method named as validateToken
this.decodeToken() // decode token here in this method
this.getUserDetail() //if everything worked fine call your another get request in another method
}
},
err => {
console.log(err, err.status) //catch your error here
})

getUserDetail(){
// make http get request for user detail and saveing into locastroage
}

关于RxJS 在第一次成功时调用第二次操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36441402/

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