我是Observer和Http请求的新手。 我的代码实际上在工作,但一点都不优雅,问题是该URL被调用了两次
isAuthenticated() {
let obs = this.http.get('http://localhost:8080/api/isLoggedIn', { withCredentials: true })
obs.pipe(
map(data => data.json())
).subscribe(data => {
if (data.user){
let user = {
"steam": {
displayName: null,
id: null,
photo: null
},
"db": {
}
}
// console.log(data)
user.db = data.user.db[0]
user.steam.displayName = data.user.displayName
user.steam.id = data.user.id
user.steam.photo = data.user.photos[2]
localStorage.setItem('userData', JSON.stringify(user));
}
})
return obs.pipe(
map(data => !!JSON.parse(data["_body"]).success)
)
}
首先,为什么两次叫“ http://localhost:8080/api/isLoggedIn”?
第二,如何以一种全能的方式做到这一点? 因为我一无所知,我被迫做2个单独的事情
答案 0 :(得分:1)
您可以使用对蒸汽没有副作用的点击运算符,数据将被传递到地图上
obs.pipe(
map(data => data.json()),
tap(data => {
if (data.user){
let user = {
"steam": {
displayName: null,
id: null,
photo: null
},
"db": {
}
}
// console.log(data)
user.db = data.user.db[0]
user.steam.displayName = data.user.displayName
user.steam.id = data.user.id
user.steam.photo = data.user.photos[2]
localStorage.setItem('userData', JSON.stringify(user));
}
}),
map(data => !!JSON.parse(data["_body"]).success)
)