Angular 6 Observer-两次调用身份验证

时间:2018-07-28 22:25:14

标签: angular rxjs

我是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个单独的事情

1 个答案:

答案 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)
  )